diff --git a/app/src/androidTest/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebViewFocusAndroidTest.kt b/app/src/androidTest/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebViewFocusAndroidTest.kt index ab0285d976..0536322c49 100644 --- a/app/src/androidTest/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebViewFocusAndroidTest.kt +++ b/app/src/androidTest/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebViewFocusAndroidTest.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.unit.dp import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Rule diff --git a/app/src/androidTest/java/com/ai/assistance/operit/ui/common/markdown/ToolCardStreamBoundaryAndroidTest.kt b/app/src/androidTest/java/com/ai/assistance/operit/ui/common/markdown/ToolCardStreamBoundaryAndroidTest.kt index 164e8cba38..be8e2e9389 100644 --- a/app/src/androidTest/java/com/ai/assistance/operit/ui/common/markdown/ToolCardStreamBoundaryAndroidTest.kt +++ b/app/src/androidTest/java/com/ai/assistance/operit/ui/common/markdown/ToolCardStreamBoundaryAndroidTest.kt @@ -24,8 +24,9 @@ class ToolCardStreamBoundaryAndroidTest { @get:Rule val composeRule = createComposeRule() private fun chars(text: String): Stream = stream { text.forEach { emit(it) } } + // XML 属性含双引号,使用原始字符串避免测试样例被误解析为 Kotlin 代码。 private fun tool(value: String): String = - "$value" + """$value""" private fun render(prefix: String?, tail: String): StreamMarkdownRendererState { val state = StreamMarkdownRendererState() @@ -52,13 +53,13 @@ class ToolCardStreamBoundaryAndroidTest { @Test fun closedToolPrefixKeepsFollowingRequestAndResultSeparate() { val first = tool("首次") - val result = "已创建" + val result = """已创建""" val next = tool("第二次") assertBlocks(render(first, result + next), listOf(first, result, next)) } @Test fun unfinishedToolContinuesOnceAndNewToolsStartNewCards() { - val prefix = "开始" + val prefix = """开始""" val close = "继续" val next = listOf(tool("第二次"), tool("第三次")) assertBlocks(render(prefix, close + next.joinToString("")), listOf(prefix + close) + next) @@ -96,7 +97,7 @@ class ToolCardStreamBoundaryAndroidTest { } @Test fun xmlReplayIncludesRestoredPrefixAndEndsBeforeMessageCompletion() { - val prefix = "开始" + val prefix = """开始""" val body = "继续" val end = "" val source = MutableSharedStreamImpl(replay = Int.MAX_VALUE) diff --git a/app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/ffmpeg/ffmpeg_probe.js b/app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/media/ffmpeg/ffmpeg_probe.js similarity index 100% rename from app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/ffmpeg/ffmpeg_probe.js rename to app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/media/ffmpeg/ffmpeg_probe.js diff --git a/app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js b/app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js similarity index 100% rename from app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js rename to app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js diff --git a/app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/probe.js b/app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/probe.js similarity index 100% rename from app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/probe.js rename to app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/probe.js diff --git a/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract/suspend_await.js b/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract/suspend_await.js index 2a936bdbcf..5b4c5c20af 100644 --- a/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract/suspend_await.js +++ b/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract/suspend_await.js @@ -7,7 +7,7 @@ const { runSuite, } = require('./common'); -const AndroidShellExecutor = Java.com.ai.assistance.operit.core.tools.system.AndroidShellExecutor; +const AndroidShellExecutor = Java.com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor; const StandardActionListener = Java.com.ai.assistance.operit.core.tools.system.action.StandardActionListener; const StreamBuildersKt = Java.type('com.ai.assistance.operit.util.stream.StreamBuildersKt'); @@ -28,7 +28,7 @@ function assertCommandResultProxy(result, label) { assert(result && typeof result === 'object', (label || 'result') + ' should be an object'); assertEq( String(result.className), - 'com.ai.assistance.operit.core.tools.system.AndroidShellExecutor$CommandResult', + 'com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor$CommandResult', (label || 'result') + ' className mismatch' ); assertEq(typeof result.success, 'boolean', (label || 'result') + ' success should be boolean'); @@ -51,7 +51,7 @@ exports.run = async function run() { test('Java.callSuspend awaits companion suspend method and returns proxy result', async () => { const result = await withTimeout( Java.callSuspend( - 'com.ai.assistance.operit.core.tools.system.AndroidShellExecutor', + 'com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor', 'executeShellCommand', 'echo bridge-contract-suspend-top-level' ), diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6bcd5c683f..7e37adc31c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,7 +120,7 @@ tools:node="remove" /> @@ -327,7 +327,7 @@ android:foregroundServiceType="dataSync" /> diff --git a/app/src/main/java/com/ai/assistance/operit/api/chat/EnhancedAIService.kt b/app/src/main/java/com/ai/assistance/operit/api/chat/EnhancedAIService.kt index b54aac3afb..13e5687102 100644 --- a/app/src/main/java/com/ai/assistance/operit/api/chat/EnhancedAIService.kt +++ b/app/src/main/java/com/ai/assistance/operit/api/chat/EnhancedAIService.kt @@ -37,11 +37,11 @@ import com.ai.assistance.operit.core.chat.hooks.mergeAdjacentTurns import com.ai.assistance.operit.core.chat.hooks.toPromptTurns import com.ai.assistance.operit.core.chat.hooks.toRoleContentPairs import com.ai.assistance.operit.core.application.ActivityLifecycleManager -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.climode.CliToolModeSupport import com.ai.assistance.operit.core.tools.climode.ToolExposureMode -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilitySession import com.ai.assistance.operit.data.model.FunctionType import com.ai.assistance.operit.data.model.InputProcessingState diff --git a/app/src/main/java/com/ai/assistance/operit/core/application/OperitApplication.kt b/app/src/main/java/com/ai/assistance/operit/core/application/OperitApplication.kt index 72fd4c08d2..e123e36db3 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/application/OperitApplication.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/application/OperitApplication.kt @@ -28,9 +28,9 @@ import com.ai.assistance.operit.plugins.lifecycle.AppLifecycleEvent import com.ai.assistance.operit.plugins.lifecycle.AppLifecycleHookParams import com.ai.assistance.operit.plugins.lifecycle.AppLifecycleHookPluginRegistry import com.ai.assistance.operit.core.config.SystemPromptConfig -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import com.ai.assistance.operit.core.workflow.WorkflowSchedulerInitializer import com.ai.assistance.operit.data.backup.RoomDatabaseBackupPreferences import com.ai.assistance.operit.data.backup.RoomDatabaseBackupScheduler diff --git a/app/src/main/java/com/ai/assistance/operit/core/chat/AIMessageManager.kt b/app/src/main/java/com/ai/assistance/operit/core/chat/AIMessageManager.kt index d14c9c3012..cc52ba0c22 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/chat/AIMessageManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/chat/AIMessageManager.kt @@ -25,9 +25,9 @@ import com.ai.assistance.operit.core.chat.hooks.PromptTurnKind import com.ai.assistance.operit.core.chat.plugins.MessageProcessingController import com.ai.assistance.operit.core.chat.plugins.MessageProcessingHookParams import com.ai.assistance.operit.core.chat.plugins.MessageProcessingPluginRegistry -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.MemoryQueryResultData -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.AttachmentInfo import com.ai.assistance.operit.data.model.ChatMessage diff --git a/app/src/main/java/com/ai/assistance/operit/core/chat/context/ConversationService.kt b/app/src/main/java/com/ai/assistance/operit/core/chat/context/ConversationService.kt index 95d01e01f2..f6a6dccf7e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/chat/context/ConversationService.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/chat/context/ConversationService.kt @@ -20,8 +20,8 @@ import com.ai.assistance.operit.core.chat.hooks.toPromptTurns import com.ai.assistance.operit.core.config.SystemPromptConfig import com.ai.assistance.operit.core.tools.climode.ToolExposureMode import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ConversationSummaryConfig import com.ai.assistance.operit.data.model.FunctionType @@ -47,7 +47,7 @@ import com.ai.assistance.operit.util.stream.TextStreamEventType import com.ai.assistance.operit.util.stream.TextStreamRevisionTracker import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.util.streamnative.NativeXmlSplitter import com.github.difflib.DiffUtils import com.github.difflib.UnifiedDiffUtils diff --git a/app/src/main/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManager.kt b/app/src/main/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManager.kt index d67bce04fb..a65707cbc0 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManager.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.chat.protocol import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.core.chat.media.MediaLinkParser -import com.ai.assistance.operit.core.tools.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits import com.ai.assistance.operit.core.chat.protocol.ChatMarkupRegex import com.ai.assistance.operit.util.media.ImagePoolManager import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/chat/tools/ToolExecutionManager.kt b/app/src/main/java/com/ai/assistance/operit/core/chat/tools/ToolExecutionManager.kt index 30414ad50e..51aa2eaa1e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/chat/tools/ToolExecutionManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/chat/tools/ToolExecutionManager.kt @@ -5,16 +5,16 @@ import com.ai.assistance.operit.ui.common.a2ui.CardFences import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.AIToolHookDecision +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHookDecision import com.ai.assistance.operit.core.chat.protocol.toolFailurePayload import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.core.tools.climode.CliToolModeSupport import com.ai.assistance.operit.core.tools.climode.ToolExposureMode import com.ai.assistance.operit.data.model.ToolInvocation import com.ai.assistance.operit.data.model.ToolResult -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilitySession import com.ai.assistance.operit.util.stream.StreamCollector diff --git a/app/src/main/java/com/ai/assistance/operit/core/config/SystemPromptConfig.kt b/app/src/main/java/com/ai/assistance/operit/core/config/SystemPromptConfig.kt index 431fe5f31b..b312156562 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/config/SystemPromptConfig.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/config/SystemPromptConfig.kt @@ -6,7 +6,7 @@ import com.ai.assistance.operit.core.chat.hooks.PromptHookContext import com.ai.assistance.operit.core.chat.hooks.PromptHookRegistry import com.ai.assistance.operit.core.tools.climode.CliToolModeSupport import com.ai.assistance.operit.core.tools.climode.ToolExposureMode -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.preferences.ApiPreferences import com.ai.assistance.operit.data.skill.SkillRepository import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.process.WorkspaceRuleFileReader diff --git a/app/src/main/java/com/ai/assistance/operit/core/config/SystemToolPrompts.kt b/app/src/main/java/com/ai/assistance/operit/core/config/SystemToolPrompts.kt index 4315712ae1..edeb081ae1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/config/SystemToolPrompts.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/config/SystemToolPrompts.kt @@ -5,7 +5,7 @@ import com.ai.assistance.operit.core.chat.hooks.PromptHookRegistry import com.ai.assistance.operit.data.model.SystemToolPromptCategory import com.ai.assistance.operit.data.model.ToolPrompt import com.ai.assistance.operit.data.model.ToolParameterSchema -import com.ai.assistance.operit.core.tools.defaultTool.a2ui.A2uiToolDefinitions +import com.ai.assistance.operit.core.tools.builtin.a2ui.A2uiToolDefinitions /** * 系统工具提示词管理器 diff --git a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ChatMemoryRebuildManager.kt b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ChatMemoryRebuildManager.kt index aaa3b94dae..11d84d4dca 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ChatMemoryRebuildManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ChatMemoryRebuildManager.kt @@ -4,7 +4,7 @@ import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.data.memory.resolveChatMemorySpaceId import com.ai.assistance.operit.api.chat.EnhancedAIService -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.ChatHistory import com.ai.assistance.operit.data.model.FunctionType import com.ai.assistance.operit.data.preferences.CharacterCardManager diff --git a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ConversationMemoryExtractor.kt b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ConversationMemoryExtractor.kt index d3d217f165..0e615451a3 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ConversationMemoryExtractor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/ConversationMemoryExtractor.kt @@ -6,7 +6,7 @@ import com.ai.assistance.operit.core.chat.protocol.ChatMarkupRegex import com.ai.assistance.operit.core.chat.protocol.ThinkingMarkup import com.ai.assistance.operit.R import com.ai.assistance.operit.api.chat.AIService -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.Memory import com.ai.assistance.operit.data.preferences.ApiPreferences import com.ai.assistance.operit.data.preferences.MemorySearchSettingsPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/MemoryAutoSaveScheduler.kt b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/MemoryAutoSaveScheduler.kt index 85d42a41a7..6006e40ba9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/MemoryAutoSaveScheduler.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/memory/extraction/MemoryAutoSaveScheduler.kt @@ -2,7 +2,7 @@ package com.ai.assistance.operit.core.memory.extraction import android.content.Context import com.ai.assistance.operit.api.chat.EnhancedAIService -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.db.AppDatabase import com.ai.assistance.operit.data.model.FunctionType import com.ai.assistance.operit.data.model.MemoryAutoSaveCandidate diff --git a/app/src/main/java/com/ai/assistance/operit/core/performance/PerformanceMonitorManager.kt b/app/src/main/java/com/ai/assistance/operit/core/performance/PerformanceMonitorManager.kt index 702c260e73..5a3c703622 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/performance/PerformanceMonitorManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/performance/PerformanceMonitorManager.kt @@ -8,7 +8,7 @@ import android.os.Process import android.os.SystemClock import android.system.Os import android.system.OsConstants -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.terminal.TerminalManager import com.ai.assistance.operit.util.logging.AppLogger import java.io.File diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolPackage.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/ToolPackage.kt index 362a87c8d5..69916a97b1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolPackage.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/ToolPackage.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.tools import android.content.Context import android.os.Build import com.ai.assistance.operit.core.tools.javascript.JsToolManager - import com.ai.assistance.operit.core.tools.packTool.PackageManager + import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.model.ToolValidationResult @@ -32,6 +32,7 @@ import kotlinx.serialization.json.JsonPrimitive import kotlinx.coroutines.runBlocking import kotlinx.coroutines.flow.last import java.util.Locale +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor /** * Represents a package of tools that can be imported by the AI diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/agent/PhoneAgent.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/agent/PhoneAgent.kt index d91d03440b..111f45cd7f 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/agent/PhoneAgent.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/agent/PhoneAgent.kt @@ -13,11 +13,11 @@ import androidx.core.content.FileProvider import com.ai.assistance.operit.R import com.ai.assistance.operit.api.chat.AIService import com.ai.assistance.operit.core.chat.hooks.toPromptTurns -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.AppListData -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardUITools +import com.ai.assistance.operit.core.tools.builtin.ui.StandardUITools import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt similarity index 72% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt index d02c589a91..3e428564ec 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt @@ -1,11 +1,35 @@ -package com.ai.assistance.operit.core.tools.defaultTool +package com.ai.assistance.operit.core.tools.builtin import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.admin.* -import com.ai.assistance.operit.core.tools.defaultTool.root.* -import com.ai.assistance.operit.core.tools.defaultTool.standard.* -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel + + + +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.androidPermissionPreferences +import com.ai.assistance.operit.core.tools.builtin.calculator.StandardCalculator +import com.ai.assistance.operit.core.tools.builtin.chat.StandardChatManagerTool +import com.ai.assistance.operit.core.tools.builtin.device.StandardDeviceInfoToolExecutor +import com.ai.assistance.operit.core.tools.builtin.filesystem.AdminFileSystemTools +import com.ai.assistance.operit.core.tools.builtin.filesystem.StandardFileSystemTools +import com.ai.assistance.operit.core.tools.builtin.media.StandardFFmpegConvertToolExecutor +import com.ai.assistance.operit.core.tools.builtin.media.StandardFFmpegInfoToolExecutor +import com.ai.assistance.operit.core.tools.builtin.media.StandardFFmpegToolExecutor +import com.ai.assistance.operit.core.tools.builtin.media.StandardMusicPlaybackTools +import com.ai.assistance.operit.core.tools.builtin.memory.MemoryQueryToolExecutor +import com.ai.assistance.operit.core.tools.builtin.settings.StandardSoftwareSettingsModifyTools +import com.ai.assistance.operit.core.tools.builtin.shell.StandardShellToolExecutor +import com.ai.assistance.operit.core.tools.builtin.system.AdminSystemOperationTools +import com.ai.assistance.operit.core.tools.builtin.system.StandardIntentToolExecutor +import com.ai.assistance.operit.core.tools.builtin.system.StandardSendBroadcastToolExecutor +import com.ai.assistance.operit.core.tools.builtin.system.StandardSystemOperationTools +import com.ai.assistance.operit.core.tools.builtin.terminal.StandardTerminalCommandExecutor +import com.ai.assistance.operit.core.tools.builtin.ui.AdminUITools +import com.ai.assistance.operit.core.tools.builtin.ui.RootUITools +import com.ai.assistance.operit.core.tools.builtin.ui.StandardUITools +import com.ai.assistance.operit.core.tools.builtin.web.StandardBrowserSessionTools +import com.ai.assistance.operit.core.tools.builtin.web.StandardHttpTools +import com.ai.assistance.operit.core.tools.builtin.web.StandardWebVisitTool +import com.ai.assistance.operit.core.tools.builtin.workflow.StandardWorkflowTools /** 工具获取器 - 根据三档用户模式获取工具,管理员工具在操作时按实际授权选择后端 */ object ToolGetter { @@ -17,8 +41,7 @@ object ToolGetter { */ fun getFileSystemTools(context: Context): StandardFileSystemTools { return when (androidPermissionPreferences.getPreferredPermissionLevel()) { - AndroidPermissionLevel.ROOT -> RootFileSystemTools(context) - AndroidPermissionLevel.ADMIN -> AdminFileSystemTools(context) + AndroidPermissionLevel.ADMIN, AndroidPermissionLevel.ROOT -> AdminFileSystemTools(context) AndroidPermissionLevel.STANDARD -> StandardFileSystemTools(context) null -> StandardFileSystemTools(context) // 默认使用标准权限级别 } @@ -54,8 +77,7 @@ object ToolGetter { */ fun getSystemOperationTools(context: Context): StandardSystemOperationTools { return when (androidPermissionPreferences.getPreferredPermissionLevel()) { - AndroidPermissionLevel.ROOT -> RootSystemOperationTools(context) - AndroidPermissionLevel.ADMIN -> AdminSystemOperationTools(context) + AndroidPermissionLevel.ADMIN, AndroidPermissionLevel.ROOT -> AdminSystemOperationTools(context) AndroidPermissionLevel.STANDARD -> StandardSystemOperationTools(context) null -> StandardSystemOperationTools(context) // 默认使用标准权限级别 } @@ -67,12 +89,8 @@ object ToolGetter { * @return 根据首选权限级别的设备信息工具执行器实现 */ fun getDeviceInfoToolExecutor(context: Context): StandardDeviceInfoToolExecutor { - return when (androidPermissionPreferences.getPreferredPermissionLevel()) { - AndroidPermissionLevel.ROOT -> RootDeviceInfoToolExecutor(context) - AndroidPermissionLevel.ADMIN -> AdminDeviceInfoToolExecutor(context) - AndroidPermissionLevel.STANDARD -> StandardDeviceInfoToolExecutor(context) - null -> StandardDeviceInfoToolExecutor(context) // 默认使用标准权限级别 - } + // 原有各权限版本均没有设备信息特有行为,共享实现按实际能力执行操作。 + return StandardDeviceInfoToolExecutor(context) } /** diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolDefinitions.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolDefinitions.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolDefinitions.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolDefinitions.kt index d283c69673..edbd97302a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolDefinitions.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolDefinitions.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.a2ui +package com.ai.assistance.operit.core.tools.builtin.a2ui import com.ai.assistance.operit.data.model.SystemToolPromptCategory import com.ai.assistance.operit.data.model.ToolParameterSchema diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolRuntime.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolRuntime.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolRuntime.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolRuntime.kt index 84495736e1..6c64e67e41 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolRuntime.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolRuntime.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.a2ui +package com.ai.assistance.operit.core.tools.builtin.a2ui import com.ai.assistance.operit.core.chat.tools.ToolExecutionManager.ToolRuntimeContext import com.ai.assistance.operit.ui.common.a2ui.CardDelivery diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiTools.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiTools.kt index 0078867906..16478c4916 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiTools.kt @@ -1,8 +1,8 @@ -package com.ai.assistance.operit.core.tools.defaultTool.a2ui +package com.ai.assistance.operit.core.tools.builtin.a2ui import android.content.Context import com.ai.assistance.operit.core.chat.tools.ToolExecutionManager -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardCalculator.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/calculator/StandardCalculator.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardCalculator.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/calculator/StandardCalculator.kt index ec75b62e78..7bec4ed615 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardCalculator.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/calculator/StandardCalculator.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.calculator import com.ai.assistance.operit.core.tools.CalculationResultData import com.ai.assistance.operit.core.tools.DateResultData diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardChatManagerTool.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/chat/StandardChatManagerTool.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardChatManagerTool.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/chat/StandardChatManagerTool.kt index 833313a5e9..2d733388d1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardChatManagerTool.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/chat/StandardChatManagerTool.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.chat import android.content.ComponentName import android.content.Context diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardDeviceInfoToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/device/StandardDeviceInfoToolExecutor.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardDeviceInfoToolExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/device/StandardDeviceInfoToolExecutor.kt index d12b500507..324edf4612 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardDeviceInfoToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/device/StandardDeviceInfoToolExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.device import android.content.Context import android.content.Intent @@ -10,7 +10,7 @@ import android.os.StatFs import android.provider.Settings import com.ai.assistance.operit.core.tools.DeviceInfoResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/AdminFileSystemTools.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerFileSystemTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/AdminFileSystemTools.kt index 89bc40e8fe..0c03afbffa 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerFileSystemTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/AdminFileSystemTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.debugger +package com.ai.assistance.operit.core.tools.builtin.filesystem import android.content.ActivityNotFoundException import android.content.ClipData @@ -6,8 +6,8 @@ import android.content.Context import android.content.Intent import android.webkit.MimeTypeMap import androidx.core.content.FileProvider -import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.BuildConfig +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.DirectoryListingData import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.core.tools.FileExistsData @@ -16,14 +16,19 @@ import com.ai.assistance.operit.core.tools.FileOperationData import com.ai.assistance.operit.core.tools.FilePartContentData import com.ai.assistance.operit.core.tools.FindFilesResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutionLimits -import com.ai.assistance.operit.BuildConfig -import com.ai.assistance.operit.core.tools.defaultTool.accessbility.AccessibilityFileSystemTools -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus +import com.ai.assistance.operit.core.tools.builtin.filesystem.PathValidator +import com.ai.assistance.operit.core.tools.builtin.filesystem.StandardFileSystemTools +import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver +import com.ai.assistance.operit.core.tools.permissions.PermissionOperationRouter +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult -import com.ai.assistance.operit.core.tools.defaultTool.PathValidator +import com.ai.assistance.operit.util.files.AndroidUserPathUtils +import com.ai.assistance.operit.util.files.FileUtils +import com.ai.assistance.operit.util.logging.AppLogger import java.io.BufferedInputStream import java.io.BufferedOutputStream import java.io.File @@ -38,20 +43,17 @@ import java.util.zip.ZipFile import java.util.zip.ZipInputStream import java.util.zip.ZipOutputStream import kotlin.math.exp -import com.ai.assistance.operit.util.files.FileUtils -import com.ai.assistance.operit.core.tools.ToolProgressBus -import com.ai.assistance.operit.util.files.AndroidUserPathUtils import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.collect import kotlinx.coroutines.isActive import kotlinx.coroutines.launch -import kotlinx.coroutines.flow.collect -/** 调试者级别的文件系统工具,继承无障碍版本 */ -open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTools(context) { +/** 管理员文件工具按实际授权选择标准或 Shell 操作,Root 复用同一能力路由。 */ +open class AdminFileSystemTools(context: Context) : StandardFileSystemTools(context) { companion object { - private const val TAG = "DebuggerFileSystemTools" + private const val TAG = "AdminFileSystemTools" internal fun isOperitInternalPath(path: String): Boolean { val normalizedPath = path.trim() val appPackage = BuildConfig.APPLICATION_ID @@ -59,7 +61,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo AndroidUserPathUtils.isCurrentUserPackageDataPath(normalizedPath, appPackage) } } - + /** * 判断路径是否为Operit应用的内部存储路径 * 仅针对 Operit 应用自身数据目录路径返回true @@ -86,7 +88,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** List files in a directory */ - override suspend fun listFiles(tool: AITool): ToolResult { + private suspend fun listFilesWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.listFiles(tool) @@ -97,8 +99,8 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - - // 如果是Operit内部存储路径,使用super(AccessibilityFileSystemTools)的高权限方法 + + // 应用内部路径由标准文件实现处理,保留应用自身访问能力。 if (isOperitInternalPath(path)) { return super.listFiles(tool) } @@ -398,7 +400,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo * Reads the full content of a file as a new tool, handling different file types. * This function does not enforce a size limit. */ - override suspend fun readFileFull(tool: AITool): ToolResult { + private suspend fun readFileFullWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.readFileFull(tool) @@ -409,7 +411,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo val path = tool.parameters.find { it.name == "path" }?.value ?: "" val textOnly = tool.parameters.find { it.name == "text_only" }?.value?.toBoolean() ?: false PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.readFileFull(tool) @@ -423,7 +425,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo error = "Path parameter is required" ) } - + try { // First check if the file exists using shell command val existsResult = @@ -519,7 +521,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Read file content */ - override suspend fun readFile(tool: AITool): ToolResult { + private suspend fun readFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.readFile(tool) @@ -529,7 +531,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.readFile(tool) @@ -633,7 +635,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** 按行号范围读取文件内容(行号从1开始,包括开始行和结束行) */ - override suspend fun readFilePart(tool: AITool): ToolResult { + private suspend fun readFilePartWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.readFilePart(tool) @@ -643,7 +645,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.readFilePart(tool) @@ -787,28 +789,28 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo if (isOperitInternalPath(path)) { return super.handleSpecialFileRead(tool, path, fileExt) } - + // 如果文件可读,直接使用父类逻辑(更高效) if (file.exists() && file.canRead()) { return super.handleSpecialFileRead(tool, path, fileExt) } AppLogger.d(TAG, "File not directly readable (permission restricted), trying Shell copy for: $path") - + // 创建临时文件用于中转 val tempFile = File(context.cacheDir, "shell_copy_${System.currentTimeMillis()}.$fileExt") - + return try { // 使用cat命令复制文件内容 // 注意:使用cat而不是cp,因为cp可能保留权限属性导致仍然无法读取 val copyResult = AndroidShellExecutor.executeShellCommand("cat '$path' > '${tempFile.absolutePath}'") - + if (!copyResult.success) { AppLogger.w(TAG, "Shell copy failed: ${copyResult.stderr}") // 复制失败,回退到父类逻辑(虽然很可能也失败,但能返回一致的错误信息) return super.handleSpecialFileRead(tool, path, fileExt) } - + // 检查临时文件是否有效 if (!tempFile.exists() || tempFile.length() == 0L) { AppLogger.w(TAG, "Temp file is empty or does not exist after copy") @@ -817,7 +819,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo // 使用临时文件路径调用父类处理逻辑 val tempToolResult = super.handleSpecialFileRead(tool, tempFile.absolutePath, fileExt) - + // 如果处理成功,修正返回结果中的 path 为原始路径 if (tempToolResult != null && tempToolResult.success) { val resultData = tempToolResult.result @@ -827,9 +829,9 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo ) } } - + tempToolResult - + } catch (e: Exception) { AppLogger.e(TAG, "Error in shell copy strategy", e) super.handleSpecialFileRead(tool, path, fileExt) @@ -846,7 +848,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Write content to a file */ - override suspend fun writeFile(tool: AITool): ToolResult { + private suspend fun writeFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.writeFile(tool) @@ -858,7 +860,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo PathValidator.validateAndroidPath(path, tool.name)?.let { return it } val content = tool.parameters.find { it.name == "content" }?.value ?: "" val append = tool.parameters.find { it.name == "append" }?.value?.toBoolean() ?: false - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.writeFile(tool) @@ -1045,7 +1047,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Delete a file or directory */ - override suspend fun deleteFile(tool: AITool): ToolResult { + private suspend fun deleteFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.deleteFile(tool) @@ -1058,7 +1060,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.deleteFile(tool) @@ -1185,7 +1187,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Check if a file or directory exists */ - override suspend fun fileExists(tool: AITool): ToolResult { + private suspend fun fileExistsWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.fileExists(tool) @@ -1198,7 +1200,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.fileExists(tool) @@ -1276,7 +1278,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Move or rename a file or directory */ - override suspend fun moveFile(tool: AITool): ToolResult { + private suspend fun moveFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.moveFile(tool) @@ -1288,7 +1290,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } PathValidator.validateAndroidPath(sourcePath, tool.name)?.let { return it } PathValidator.validateAndroidPath(destPath, tool.name)?.let { return it } - + // 如果源文件或目标文件在Operit内部存储,使用super的高权限方法 if (isOperitInternalPath(sourcePath) || isOperitInternalPath(destPath)) { return super.moveFile(tool) @@ -1359,21 +1361,21 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Copy a file or directory */ - override suspend fun copyFile(tool: AITool): ToolResult { + private suspend fun copyFileWithShell(tool: AITool): ToolResult { // 检查是否是 Linux 环境或跨环境操作 val environment = tool.parameters.find { it.name == "environment" }?.value val sourceEnvironment = tool.parameters.find { it.name == "source_environment" }?.value val destEnvironment = tool.parameters.find { it.name == "dest_environment" }?.value - + // 确定源和目标环境 val srcEnv = sourceEnvironment ?: environment ?: "android" val dstEnv = destEnvironment ?: environment ?: "android" - + // 如果是 Linux 环境或跨环境操作,委托给父类处理 if (srcEnv.lowercase() == "linux" || dstEnv.lowercase() == "linux") { return super.copyFile(tool) } - + val sourcePath = tool.parameters.find { it.name == "source" }?.value ?: "" val destPath = tool.parameters.find { it.name == "destination" }?.value ?: "" val recursive = tool.parameters.find { it.name == "recursive" }?.value?.toBoolean() ?: true @@ -1382,7 +1384,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } PathValidator.validateAndroidPath(sourcePath, tool.name, "source")?.let { return it } PathValidator.validateAndroidPath(destPath, tool.name, "destination")?.let { return it } - + // 如果源文件或目标文件在Operit内部存储,使用super的高权限方法 if (isOperitInternalPath(sourcePath) || isOperitInternalPath(destPath)) { return super.copyFile(tool) @@ -1528,7 +1530,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Create a directory */ - override suspend fun makeDirectory(tool: AITool): ToolResult { + private suspend fun makeDirectoryWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.makeDirectory(tool) @@ -1538,7 +1540,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo return super.makeDirectory(tool) } PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.makeDirectory(tool) @@ -1567,7 +1569,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo AndroidShellExecutor.executeShellCommand( "test -d '$path' && echo 'exists' || echo 'not exists'" ) - + if (checkDirResult.success && checkDirResult.stdout.trim() == "exists") { // 目录已存在,返回成功 return ToolResult( @@ -1606,7 +1608,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo AndroidShellExecutor.executeShellCommand( "test -d '$path' && echo 'exists' || echo 'not exists'" ) - + if (recheckDirResult.success && recheckDirResult.stdout.trim() == "exists") { // 目录已存在,返回成功 return ToolResult( @@ -1622,7 +1624,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo error = "" ) } - + return ToolResult( toolName = tool.name, success = false, @@ -1654,7 +1656,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Search for files matching a pattern */ - override suspend fun findFiles(tool: AITool): ToolResult { + private suspend fun findFilesWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.findFiles(tool) @@ -1835,7 +1837,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Get file information */ - override suspend fun fileInfo(tool: AITool): ToolResult { + private suspend fun fileInfoWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.fileInfo(tool) @@ -1848,7 +1850,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo val path = tool.parameters.find { it.name == "path" }?.value ?: "" PathValidator.validateAndroidPath(path, tool.name)?.let { return it } - + // 如果是Operit内部存储路径,使用super的高权限方法 if (isOperitInternalPath(path)) { return super.fileInfo(tool) @@ -2011,7 +2013,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Zip files or directories */ - override suspend fun zipFiles(tool: AITool): ToolResult { + private suspend fun zipFilesWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.zipFiles(tool) @@ -2256,7 +2258,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** Unzip a zip file */ - override suspend fun unzipFiles(tool: AITool): ToolResult { + private suspend fun unzipFilesWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.unzipFiles(tool) @@ -2574,7 +2576,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** 打开文件 使用系统默认应用打开文件 */ - override suspend fun openFile(tool: AITool): ToolResult { + private suspend fun openFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.openFile(tool) @@ -2678,7 +2680,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** 分享文件 调用系统分享功能 */ - override suspend fun shareFile(tool: AITool): ToolResult { + private suspend fun shareFileWithShell(tool: AITool): ToolResult { val environment = tool.parameters.find { it.name == "environment" }?.value if (environment == "linux") { return super.shareFile(tool) @@ -2828,7 +2830,7 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo } /** 下载文件 从网络URL下载文件到指定路径 */ - override suspend fun downloadFile(tool: AITool): ToolResult { + private suspend fun downloadFileWithShell(tool: AITool): ToolResult { return super.downloadFile(tool) } @@ -2927,4 +2929,71 @@ open class DebuggerFileSystemTools(context: Context) : AccessibilityFileSystemTo // ) // } // } + + // 路由与具体操作放在同一工具中,避免通过历史权限等级继承改变分派。 + + private val standardTools = StandardFileSystemTools(context) + + private suspend fun route( + readOnly: Boolean, + privileged: suspend () -> ToolResult, + standard: suspend () -> ToolResult + ): ToolResult = PermissionOperationRouter.execute( + capabilities = PermissionCapabilityResolver.shellSnapshot(context), + readOnly = readOnly, + privileged = privileged, + standard = standard, + isSuccess = { it.success } + ) + + override suspend fun listFiles(tool: AITool): ToolResult = + route(true, { listFilesWithShell(tool) }, { standardTools.listFiles(tool) }) + + override suspend fun readFileFull(tool: AITool): ToolResult = + route(true, { readFileFullWithShell(tool) }, { standardTools.readFileFull(tool) }) + + override suspend fun readFile(tool: AITool): ToolResult = + route(true, { readFileWithShell(tool) }, { standardTools.readFile(tool) }) + + override suspend fun readFilePart(tool: AITool): ToolResult = + route(true, { readFilePartWithShell(tool) }, { standardTools.readFilePart(tool) }) + + override suspend fun fileExists(tool: AITool): ToolResult = + route(true, { fileExistsWithShell(tool) }, { standardTools.fileExists(tool) }) + + override suspend fun findFiles(tool: AITool): ToolResult = + route(true, { findFilesWithShell(tool) }, { standardTools.findFiles(tool) }) + + override suspend fun fileInfo(tool: AITool): ToolResult = + route(true, { fileInfoWithShell(tool) }, { standardTools.fileInfo(tool) }) + + override suspend fun writeFile(tool: AITool): ToolResult = + route(false, { writeFileWithShell(tool) }, { standardTools.writeFile(tool) }) + + override suspend fun deleteFile(tool: AITool): ToolResult = + route(false, { deleteFileWithShell(tool) }, { standardTools.deleteFile(tool) }) + + override suspend fun moveFile(tool: AITool): ToolResult = + route(false, { moveFileWithShell(tool) }, { standardTools.moveFile(tool) }) + + override suspend fun copyFile(tool: AITool): ToolResult = + route(false, { copyFileWithShell(tool) }, { standardTools.copyFile(tool) }) + + override suspend fun makeDirectory(tool: AITool): ToolResult = + route(false, { makeDirectoryWithShell(tool) }, { standardTools.makeDirectory(tool) }) + + override suspend fun zipFiles(tool: AITool): ToolResult = + route(false, { zipFilesWithShell(tool) }, { standardTools.zipFiles(tool) }) + + override suspend fun unzipFiles(tool: AITool): ToolResult = + route(false, { unzipFilesWithShell(tool) }, { standardTools.unzipFiles(tool) }) + + override suspend fun openFile(tool: AITool): ToolResult = + route(false, { openFileWithShell(tool) }, { standardTools.openFile(tool) }) + + override suspend fun shareFile(tool: AITool): ToolResult = + route(false, { shareFileWithShell(tool) }, { standardTools.shareFile(tool) }) + + override suspend fun downloadFile(tool: AITool): ToolResult = + route(false, { downloadFileWithShell(tool) }, { standardTools.downloadFile(tool) }) } diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt index 1a940dd0c1..0d72b5e90b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.filesystem import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger @@ -12,13 +12,13 @@ import com.ai.assistance.operit.core.tools.FilePartContentData import com.ai.assistance.operit.core.tools.FindFilesResultData import com.ai.assistance.operit.core.tools.GrepResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolProgressBus -import com.ai.assistance.operit.core.tools.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.files.FileUtils -import com.ai.assistance.operit.core.tools.defaultTool.PathValidator +import com.ai.assistance.operit.core.tools.builtin.filesystem.PathValidator import kotlinx.coroutines.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Semaphore diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/PathValidator.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/PathValidator.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/PathValidator.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/PathValidator.kt index 1055033993..450b182625 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/PathValidator.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/PathValidator.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool +package com.ai.assistance.operit.core.tools.builtin.filesystem import com.ai.assistance.operit.core.tools.FileOperationData import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt index 4d74aa97a8..ec3d5c5c5e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.filesystem import android.content.Context import android.database.Cursor @@ -16,8 +16,8 @@ import com.ai.assistance.operit.core.tools.FilePartContentData import com.ai.assistance.operit.core.tools.FindFilesResultData import com.ai.assistance.operit.core.tools.GrepResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutionLimits -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.preferences.ApiPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt index 59f36e65c8..15f117263b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.filesystem import android.content.Context import com.ai.assistance.operit.R @@ -16,10 +16,10 @@ import com.ai.assistance.operit.core.tools.FileInfoData import com.ai.assistance.operit.core.tools.FileOperationData import com.ai.assistance.operit.core.tools.FilePartContentData import com.ai.assistance.operit.core.tools.FindFilesResultData -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.core.tools.GrepResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.FunctionType import com.ai.assistance.operit.data.model.ModelParameter @@ -70,11 +70,12 @@ import com.ai.assistance.operit.data.preferences.ModelConfigManager import com.ai.assistance.operit.terminal.TerminalManager import com.ai.assistance.operit.terminal.provider.filesystem.FileSystemProvider import com.ai.assistance.operit.terminal.utils.SSHFileConnectionManager -import com.ai.assistance.operit.core.tools.defaultTool.PathValidator +import com.ai.assistance.operit.core.tools.builtin.filesystem.PathValidator import com.ai.assistance.operit.util.android.LocaleUtils import com.ai.assistance.operit.util.ripgrep.NativeRipgrep import org.json.JSONObject import java.util.concurrent.atomic.AtomicInteger +import com.ai.assistance.operit.core.tools.builtin.web.StandardWebVisitTool /** * Collection of file system operation tools for the AI assistant These tools use Java File APIs for diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt index faf52c5b17..d8e57e11f5 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.media import android.annotation.SuppressLint import android.bluetooth.BluetoothAdapter diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt index 1eff9787c6..a7e8b7d9fb 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt @@ -1,9 +1,9 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.media import android.content.Context import com.ai.assistance.operit.core.tools.FFmpegResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.model.ToolValidationResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt index 94e9c14345..afef6c25fc 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.media import android.content.Context import android.net.Uri diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt index d815301332..485ccd28f6 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.memory import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger @@ -7,7 +7,7 @@ import com.ai.assistance.operit.core.tools.MemoryQueryResultData import com.ai.assistance.operit.core.tools.MemoryLinkResultData import com.ai.assistance.operit.core.tools.MemoryLinkQueryResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.CharacterCardMemoryProfileBindingMode import com.ai.assistance.operit.data.model.Memory diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSoftwareSettingsModifyTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/StandardSoftwareSettingsModifyTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSoftwareSettingsModifyTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/StandardSoftwareSettingsModifyTools.kt index aa6cbf0d33..1361d4a399 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSoftwareSettingsModifyTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/StandardSoftwareSettingsModifyTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.settings import com.ai.assistance.operit.data.model.ModelConfigDefaults @@ -49,7 +49,7 @@ import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.ToolPermissionModeResultData import com.ai.assistance.operit.core.tools.javascript.JsEngine import com.ai.assistance.operit.core.tools.javascript.JsExecutionTraceRecorder -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ApiProviderType import com.ai.assistance.operit.data.model.CharacterCard diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupport.kt similarity index 93% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupport.kt index a4f9ceae01..b8f66c5183 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupport.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.settings import com.ai.assistance.operit.core.tools.ToolPermissionModeResultData import com.ai.assistance.operit.ui.permissions.PermissionLevel diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafety.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafety.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafety.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafety.kt index b8baf82689..3cb5081408 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafety.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafety.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.shell /** * Lightweight shell command safety validator. diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardShellToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/StandardShellToolExecutor.kt similarity index 94% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardShellToolExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/StandardShellToolExecutor.kt index 2b6152ab4c..86941a73fa 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardShellToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/StandardShellToolExecutor.kt @@ -1,11 +1,11 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.shell import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.ADBResultData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.model.ToolValidationResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerSystemOperationTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/AdminSystemOperationTools.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerSystemOperationTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/AdminSystemOperationTools.kt index 5450332bec..2697ad5b7b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerSystemOperationTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/AdminSystemOperationTools.kt @@ -1,20 +1,20 @@ -package com.ai.assistance.operit.core.tools.defaultTool.debugger +package com.ai.assistance.operit.core.tools.builtin.system import android.content.Context -import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.AppOperationData import com.ai.assistance.operit.core.tools.NotificationData import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.SystemSettingData -import com.ai.assistance.operit.core.tools.defaultTool.accessbility.AccessibilitySystemOperationTools +import com.ai.assistance.operit.core.tools.builtin.system.StandardSystemOperationTools import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult +import com.ai.assistance.operit.util.logging.AppLogger +import com.ai.assistance.operit.core.tools.builtin.filesystem.AdminFileSystemTools -/** 调试级别的系统操作工具,继承无障碍版本, 并使用shell命令覆盖部分实现 */ -open class DebuggerSystemOperationTools(private val context: Context) : - AccessibilitySystemOperationTools(context) { +/** 管理员系统工具按现有授权能力执行 Shell 或标准系统操作。 */ +open class AdminSystemOperationTools(private val context: Context) : StandardSystemOperationTools(context) { private val TAG = "DebuggerSystemTools" @@ -159,10 +159,10 @@ open class DebuggerSystemOperationTools(private val context: Context) : ) } - if (DebuggerFileSystemTools.isOperitInternalPath(apkPath)) { + if (AdminFileSystemTools.isOperitInternalPath(apkPath)) { AppLogger.d( TAG, - "installApp detected Operit internal path, delegating to AccessibilitySystemOperationTools" + "installApp detected Operit internal path, using standard application access" ) return super.installApp(tool) } @@ -315,14 +315,14 @@ open class DebuggerSystemOperationTools(private val context: Context) : // 先获取应用的主 Activity,然后使用 -n 参数启动 val resolveCmd = "cmd package resolve-activity --brief $packageName 2>/dev/null | tail -n 1" val resolveResult = AndroidShellExecutor.executeShellCommand(resolveCmd) - + if (resolveResult.success && resolveResult.stdout.isNotBlank()) { val output = resolveResult.stdout.trim() // resolve-activity 返回格式可能是:package/activity 或只有 activity // 也可能返回多行,最后一行是组件名 val lines = output.lines().filter { it.isNotBlank() && !it.startsWith("name=") } val mainActivity = lines.lastOrNull()?.trim() ?: output.trim() - + // 如果返回的是完整组件名(package/activity),直接使用 command = if (mainActivity.contains('/')) { "am start -n $mainActivity" @@ -473,7 +473,7 @@ open class DebuggerSystemOperationTools(private val context: Context) : ) currentText = "" } - + val pkgMatch = Regex("pkg=(\\S+)").find(line) currentPackage = pkgMatch?.groupValues?.getOrNull(1) ?: "" } @@ -483,7 +483,7 @@ open class DebuggerSystemOperationTools(private val context: Context) : } } } - + if (currentPackage.isNotEmpty() && currentText.isNotEmpty()) { notifications.add( NotificationData.Notification( diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt index 7769c1c058..82113cabdc 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.system import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt index 12a6f42c46..f4811413fb 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.system import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt index c451619304..109aac3044 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.system import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -30,8 +30,8 @@ import com.ai.assistance.operit.core.tools.LocationData import com.ai.assistance.operit.core.tools.NotificationData import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.SystemSettingData -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionPermissionRequestCoordinator -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionPermissionRequestCoordinator +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import java.util.Locale @@ -53,6 +53,7 @@ import com.ai.assistance.operit.services.notification.OperitNotificationStore import com.ai.assistance.operit.R import com.ai.assistance.operit.util.files.AndroidUserPathUtils import com.ai.assistance.operit.util.files.OperitPaths +import com.ai.assistance.operit.core.tools.builtin.media.BluetoothSessionManager /** 提供系统级操作的工具类 包括系统设置修改、应用安装和卸载等 这些操作需要用户明确授权 */ open class StandardSystemOperationTools(private val context: Context) { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt index 620c41aee4..c295ca9100 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.terminal import android.content.Context import com.ai.assistance.operit.R @@ -6,7 +6,7 @@ import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.* import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import com.ai.assistance.operit.terminal.provider.type.HiddenExecResult import com.ai.assistance.operit.terminal.view.domain.ansi.TerminalChar import kotlinx.coroutines.* diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerUITools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt similarity index 63% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerUITools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt index 46da0c842f..48ee3bda6d 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerUITools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.debugger +package com.ai.assistance.operit.core.tools.builtin.ui import android.annotation.SuppressLint import android.content.ClipData @@ -6,33 +6,37 @@ import android.content.ClipboardManager import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory -import java.io.File -import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.SimplifiedUINode import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.UIActionResultData import com.ai.assistance.operit.core.tools.UIPageResultData -import com.ai.assistance.operit.core.tools.defaultTool.accessbility.AccessibilityUITools -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardUITools +import com.ai.assistance.operit.core.tools.builtin.ui.StandardUITools import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity +import com.ai.assistance.operit.core.tools.system.uiautomator.UiAutomatorDumpGuard import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult +import com.ai.assistance.operit.data.repository.UIHierarchyManager +import com.ai.assistance.operit.util.files.OperitPaths +import com.ai.assistance.operit.util.logging.AppLogger +import com.ai.assistance.operit.util.media.ImagePoolManager +import java.io.File import java.io.StringReader import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import org.json.JSONObject import org.xmlpull.v1.XmlPullParser import org.xmlpull.v1.XmlPullParserFactory -import com.ai.assistance.operit.util.files.OperitPaths -import com.ai.assistance.operit.core.tools.system.uiautomator.UiAutomatorDumpGuard -/** 调试级别的UI工具,通过Shell命令实现UI操作,继承无障碍版本 */ -open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { +/** 管理员 UI 工具在一次操作前按实际授权选择无障碍或 Shell,Root 复用公共能力。 */ +open class AdminUITools(context: Context) : StandardUITools(context) { companion object { - private const val TAG = "DebuggerUITools" + private const val TAG = "AdminUITools" + private const val MAX_RETRY_COUNT = 3 + private const val RETRY_DELAY_MS = 300L } protected open val uiShellIdentity: ShellIdentity? = null @@ -66,7 +70,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun tap(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍点击") - return super.tap(tool) + return tapWithAccessibility(tool) } val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() @@ -137,7 +141,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun longPress(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍长按") - return super.longPress(tool) + return longPressWithAccessibility(tool) } val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() @@ -201,7 +205,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun swipe(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍滑动") - return super.swipe(tool) + return swipeWithAccessibility(tool) } val startX = tool.parameters.find { it.name == "start_x" }?.value?.toIntOrNull() @@ -276,7 +280,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun clickElement(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍点击元素") - return super.clickElement(tool) + return clickElementWithAccessibility(tool) } val resourceId = tool.parameters.find { it.name == "resourceId" }?.value @@ -359,7 +363,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun setInputText(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍设置文本") - return super.setInputText(tool) + return setInputTextWithAccessibility(tool) } val text = tool.parameters.find { it.name == "text" }?.value ?: "" @@ -469,7 +473,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { (accessibilityKeyAction(keyCode) != null || !PermissionCapabilityResolver.shellSnapshot(context).hasPrivilegedShell) ) { - return super.pressKey(tool) + return pressKeyWithAccessibility(tool) } val command = "input ${getDisplayArg(tool)}keyevent $keyCode" @@ -510,7 +514,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun captureScreenshotToFile(tool: AITool): Pair?> { if (!PermissionCapabilityResolver.shellSnapshot(context).hasPrivilegedShell) { - return if (hasDisplayParam(tool)) Pair(null, null) else super.captureScreenshotToFile(tool) + return if (hasDisplayParam(tool)) Pair(null, null) else captureScreenshotToFileWithAccessibility(tool) } return try { val screenshotDir = OperitPaths.cleanOnExitDir() @@ -537,7 +541,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { // 2) 如果 Shell 失败,作为回退尝试无障碍截图 (调用父类) AppLogger.w(TAG, "captureScreenshotToFile: Shell screencap failed, falling back to accessibility") - if (hasDisplayParam(tool)) Pair(null, null) else super.captureScreenshotToFile(tool) + if (hasDisplayParam(tool)) Pair(null, null) else captureScreenshotToFileWithAccessibility(tool) } catch (e: Exception) { AppLogger.e(TAG, "captureScreenshotToFile failed in Debugger", e) Pair(null, null) @@ -563,7 +567,7 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { override suspend fun getPageInfo(tool: AITool): ToolResult { if (shouldUseAccessibility(tool)) { AppLogger.d(TAG, "无障碍服务已启用,使用无障碍获取页面信息") - val result = super.getPageInfo(tool) + val result = getPageInfoWithAccessibility(tool) if (result.success || !PermissionCapabilityResolver.shellSnapshot(context).hasPrivilegedShell) return result } @@ -1356,4 +1360,764 @@ open class DebuggerUITools(context: Context) : AccessibilityUITools(context) { return Pair(centerX, centerY) } + + // 无障碍是管理员的执行能力,以下方法不再形成独立权限等级。 + + + + /** + * 检查无障碍服务是否正在运行 + */ + private suspend fun isAccessibilityServiceEnabled(): Boolean { + return UIHierarchyManager.isAccessibilityServiceEnabled(context) + } + + /** + * 为需要无障碍服务的工具创建一个前置检查的包装器 + */ + private suspend fun withAccessibilityCheck(tool: AITool, block: suspend () -> T): T { + if (!isAccessibilityServiceEnabled()) { + throw IllegalStateException("Accessibility Service is not enabled. Please enable it in system settings to use this feature.") + } + return block() + } + + /** + * 获取UI层次结构,失败时重试 + * @return UI层次结构XML字符串,获取失败返回空字符串 + */ + private suspend fun getUIHierarchyWithRetry(): String { + var retryCount = 0 + var uiXml = "" + + while (retryCount < MAX_RETRY_COUNT) { + uiXml = UIHierarchyManager.getUIHierarchy(context) + if (uiXml.isNotEmpty()) { + return uiXml + } + + retryCount++ + if (retryCount < MAX_RETRY_COUNT) { + AppLogger.d(TAG, "获取UI层次结构失败,正在重试 #$retryCount") + delay(RETRY_DELAY_MS) + } + } + + AppLogger.w(TAG, "获取UI层次结构失败,已重试${MAX_RETRY_COUNT}次") + return uiXml + } + + /** Gets the current UI page/window information */ + private suspend fun getPageInfoWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val format = tool.parameters.find { it.name == "format" }?.value ?: "xml" + val detail = tool.parameters.find { it.name == "detail" }?.value ?: "summary" + + if (format !in listOf("xml", "json")) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Invalid format specified. Must be 'xml' or 'json'." + ) + } + + // 使用无障碍服务获取UI数据(带重试) + val uiXml = getUIHierarchyWithRetry() + if (uiXml.isEmpty()) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Failed to retrieve UI data via accessibility service." + ) + } + + // 解析当前窗口信息 + val focusInfo = extractFocusInfoFromAccessibility() + + // 简化布局信息 + val simplifiedLayout = simplifyLayout(uiXml) + + // 创建结构化数据 + val resultData = + UIPageResultData( + packageName = focusInfo.packageName ?: "Unknown", + activityName = focusInfo.activityName ?: "Unknown", + uiElements = simplifiedLayout + ) + + ToolResult(toolName = tool.name, success = true, result = resultData, error = "") + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error getting page info", e) + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error getting page info: ${e.message}" + ) + } + } + + /** 从无障碍服务获取焦点信息 */ + private suspend fun extractFocusInfoFromAccessibility(): FocusInfo { + val focusInfo = FocusInfo() + try { + // 1. 获取UI层次结构的XML快照(带重试) + val hierarchyXml = getUIHierarchyWithRetry() + if (hierarchyXml.isEmpty()) { + AppLogger.w(TAG, "无法获取UI层次结构XML,使用默认值。") + focusInfo.packageName = "android" + // 即使XML获取失败,仍然尝试获取Activity名称 + focusInfo.activityName = UIHierarchyManager.getCurrentActivityName(context) ?: "ForegroundActivity" + return focusInfo + } + + // 2. 从XML中解析包名 + val (packageName, _) = UIHierarchyManager.extractWindowInfo(hierarchyXml) + // 3. 从服务中直接获取当前Activity名称 + val activityName = UIHierarchyManager.getCurrentActivityName(context) + + focusInfo.packageName = packageName + focusInfo.activityName = activityName // 使用从服务获取的Activity名称 + + // 如果没有获取到,使用默认值 + if (focusInfo.packageName == null) focusInfo.packageName = "android" + if (focusInfo.activityName == null) focusInfo.activityName = "ForegroundActivity" + } catch (e: Exception) { + AppLogger.e(TAG, "从XML解析焦点信息时出错", e) + // 设置默认值 + focusInfo.packageName = "android" + focusInfo.activityName = "ForegroundActivity" + } + return focusInfo + } + + /** 简化XML布局为节点树 */ + fun simplifyLayout(xml: String): SimplifiedUINode { + val factory = XmlPullParserFactory.newInstance().apply { isNamespaceAware = false } + val parser = factory.newPullParser().apply { setInput(StringReader(xml)) } + + val nodeStack = mutableListOf() + var rootNode: UINode? = null + + while (parser.eventType != XmlPullParser.END_DOCUMENT) { + when (parser.eventType) { + XmlPullParser.START_TAG -> { + if (parser.name == "node") { + val newNode = createNode(parser) + if (rootNode == null) { + rootNode = newNode + nodeStack.add(newNode) + } else { + nodeStack.lastOrNull()?.children?.add(newNode) + nodeStack.add(newNode) + } + } + } + XmlPullParser.END_TAG -> { + if (parser.name == "node") { + nodeStack.removeLastOrNull() + } + } + } + parser.next() + } + + return rootNode?.toUINode() + ?: SimplifiedUINode( + className = null, + text = null, + contentDesc = null, + resourceId = null, + bounds = null, + isClickable = false, + children = emptyList() + ) + } + + private fun createNode(parser: XmlPullParser): UINode { + // 解析关键属性 + val className = parser.getAttributeValue(null, "class")?.substringAfterLast('.') + val text = parser.getAttributeValue(null, "text")?.replace(" ", "\n") + val contentDesc = parser.getAttributeValue(null, "content-desc") + val resourceId = parser.getAttributeValue(null, "resource-id") + val bounds = parser.getAttributeValue(null, "bounds") + val isClickable = parser.getAttributeValue(null, "clickable") == "true" + + return UINode( + className = className, + text = text, + contentDesc = contentDesc, + resourceId = resourceId, + bounds = bounds, + isClickable = isClickable + ) + } + + /** 点击元素 */ + private suspend fun clickElementWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val resourceId = tool.parameters.find { it.name == "resourceId" }?.value + val className = tool.parameters.find { it.name == "className" }?.value + val contentDesc = tool.parameters.find { it.name == "contentDesc" }?.value + val index = tool.parameters.find { it.name == "index" }?.value?.toIntOrNull() ?: 0 + val bounds = tool.parameters.find { it.name == "bounds" }?.value + + if (resourceId == null && className == null && bounds == null && contentDesc == null) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Missing element identifier. Provide at least one of 'resourceId', 'className', 'contentDesc', or 'bounds'." + ) + } + + // 如果提供了边界坐标,直接解析并点击中心点 + if (bounds != null) { + return@withAccessibilityCheck handleClickByBounds(tool, bounds) + } + + // 获取UI层次结构XML(带重试) + val uiXml = getUIHierarchyWithRetry() + if (uiXml.isEmpty()) { + return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Unable to get UI hierarchy.") + } + + // 在XML中查找匹配的节点 + val matchedNodes = findNodesInXml(uiXml) { parser -> + val hasSelectors = resourceId != null || className != null || contentDesc != null + if (!hasSelectors) { + return@findNodesInXml false + } + + val actualId = parser.getAttributeValue(null, "resource-id") + val actualClass = parser.getAttributeValue(null, "class") + val actualDesc = parser.getAttributeValue(null, "content-desc") + + if(resourceId != null && (actualId == null || !actualId.endsWith(resourceId))){ + return@findNodesInXml false + } + + if(className != null && (actualClass == null || actualClass != className)){ + return@findNodesInXml false + } + + if(contentDesc != null && (actualDesc == null || !actualDesc.equals(contentDesc, ignoreCase = true))){ + return@findNodesInXml false + } + + true + } + + if (matchedNodes.isEmpty()) { + return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "No matching element found.") + } + + // 检查索引是否有效 + if (index < 0 || index >= matchedNodes.size) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Index out of range. Found ${matchedNodes.size} elements, but requested index $index." + ) + } + + // 获取目标节点的bounds + val targetNodeBounds = matchedNodes[index].bounds + if (targetNodeBounds == null) { + return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Target element has no bounds.") + } + + // 解析bounds并点击 + handleClickByBounds(tool, targetNodeBounds) + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error clicking element", e) + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error clicking element: ${e.message}" + ) + } + } + + private suspend fun handleClickByBounds(tool: AITool, bounds: String): ToolResult { + try { + val rect = parseBounds(bounds) + if (rect.isEmpty) { + return ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Invalid bounds format: $bounds") + } + + val centerX = rect.centerX() + val centerY = rect.centerY() + + withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } + val clickSuccess = performAccessibilityClick(centerX, centerY) + + return if (clickSuccess) { + withContext(Dispatchers.Main) { + operationOverlay.showTap(centerX, centerY) + operationOverlay.hide() + } + ToolResult( + toolName = tool.name, + success = true, + result = UIActionResultData( + actionType = "click", + actionDescription = "Successfully clicked at bounds $bounds", + coordinates = Pair(centerX, centerY) + ) + ) + } else { + operationOverlay.hide() + ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Failed to click at bounds $bounds via accessibility service.") + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error clicking by bounds", e) + operationOverlay.hide() + return ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Error clicking at bounds: ${e.message}") + } + } + + private fun findNodesInXml(xml: String, predicate: (parser: XmlPullParser) -> Boolean): List { + val matchedNodes = mutableListOf() + val factory = XmlPullParserFactory.newInstance().apply { isNamespaceAware = false } + val parser = factory.newPullParser().apply { setInput(StringReader(xml)) } + + while (parser.eventType != XmlPullParser.END_DOCUMENT) { + if (parser.eventType == XmlPullParser.START_TAG && parser.name == "node") { + if (predicate(parser)) { + matchedNodes.add( + NodeInfo( + bounds = parser.getAttributeValue(null, "bounds"), + text = parser.getAttributeValue(null, "text") + ) + ) + } + } + parser.next() + } + return matchedNodes + } + + private data class NodeInfo(val bounds: String?, val text: String?) + + /** 设置输入文本 */ + private suspend fun setInputTextWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val text = tool.parameters.find { it.name == "text" }?.value ?: "" + + // 通过UIHierarchyManager请求远程服务找到焦点节点的ID + val focusedNodeId = UIHierarchyManager.findFocusedNodeId(context) + if (focusedNodeId.isNullOrEmpty()) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "No focused editable field found." + ) + } + + // 显示反馈 + val rect = parseBounds(focusedNodeId) + if (!rect.isEmpty) { + operationOverlay.showTextInput(rect.centerX(), rect.centerY(), text) + } + + // 通过UIHierarchyManager请求远程服务设置文本 + val result = UIHierarchyManager.setTextOnNode(context, focusedNodeId, text) + + if (result) { + // 成功后主动隐藏overlay + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = true, + result = + UIActionResultData( + actionType = "textInput", + actionDescription = + "Successfully set input text via accessibility service" + ), + error = "" + ) + } else { + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Failed to set text via accessibility service." + ) + } + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error setting input text", e) + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error setting input text: ${e.message}" + ) + } + } + + /** 执行轻触操作 */ + private suspend fun tapWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() + val y = tool.parameters.find { it.name == "y" }?.value?.toIntOrNull() + + if (x == null || y == null) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Missing or invalid coordinates. Both 'x' and 'y' must be valid integers." + ) + } + + withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } + + // 使用无障碍服务执行点击 + val result = performAccessibilityClick(x, y) + + if (result) { + withContext(Dispatchers.Main) { + operationOverlay.showTap(x, y) + operationOverlay.hide() + } + ToolResult( + toolName = tool.name, + success = true, + result = + UIActionResultData( + actionType = "tap", + actionDescription = + "Successfully tapped at coordinates ($x, $y) via accessibility service", + coordinates = Pair(x, y) + ), + error = "" + ) + } else { + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Failed to tap at coordinates via accessibility service." + ) + } + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error tapping at coordinates", e) + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error tapping at coordinates: ${e.message}" + ) + } + } + + /** 执行长按操作 */ + private suspend fun longPressWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() + val y = tool.parameters.find { it.name == "y" }?.value?.toIntOrNull() + + if (x == null || y == null) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Missing or invalid coordinates. Both 'x' and 'y' must be valid integers." + ) + } + + withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } + + // 使用无障碍服务执行长按 + val result = performAccessibilityLongPress(x, y) + + if (result) { + withContext(Dispatchers.Main) { + operationOverlay.showTap(x, y) + operationOverlay.hide() + } + ToolResult( + toolName = tool.name, + success = true, + result = + UIActionResultData( + actionType = "long_press", + actionDescription = + "Successfully long pressed at coordinates ($x, $y) via accessibility service", + coordinates = Pair(x, y) + ), + error = "" + ) + } else { + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Failed to long press at coordinates via accessibility service." + ) + } + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error long pressing at coordinates", e) + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error long pressing at coordinates: ${e.message}" + ) + } + } + + /** 执行滑动操作 */ + private suspend fun swipeWithAccessibility(tool: AITool): ToolResult { + return try { + withAccessibilityCheck(tool) { + val startX = tool.parameters.find { it.name == "start_x" }?.value?.toIntOrNull() + val startY = tool.parameters.find { it.name == "start_y" }?.value?.toIntOrNull() + val endX = tool.parameters.find { it.name == "end_x" }?.value?.toIntOrNull() + val endY = tool.parameters.find { it.name == "end_y" }?.value?.toIntOrNull() + val duration = tool.parameters.find { it.name == "duration" }?.value?.toIntOrNull() ?: 300 + + if (startX == null || startY == null || endX == null || endY == null) { + return@withAccessibilityCheck ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Missing or invalid coordinates. 'start_x', 'start_y', 'end_x', and 'end_y' must be valid integers." + ) + } + + withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } + + // 使用无障碍服务执行滑动 + val result = performAccessibilitySwipe(startX, startY, endX, endY, duration) + + if (result) { + withContext(Dispatchers.Main) { + operationOverlay.showSwipe(startX, startY, endX, endY) + operationOverlay.hide() + } + ToolResult( + toolName = tool.name, + success = true, + result = + UIActionResultData( + actionType = "swipe", + actionDescription = + "Successfully performed swipe from ($startX, $startY) to ($endX, $endY) via accessibility service" + ), + error = "" + ) + } else { + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Failed to perform swipe via accessibility service." + ) + } + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error performing swipe", e) + operationOverlay.hide() + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error performing swipe: ${e.message}" + ) + } + } + + // 使用无障碍服务执行点击的辅助方法 + private suspend fun performAccessibilityClick(x: Int, y: Int): Boolean { + return try { + UIHierarchyManager.performClick(context, x, y) + } catch (e: Exception) { + AppLogger.e(TAG, "Error performing accessibility click", e) + return false + } + } + + // 使用无障碍服务执行长按的辅助方法 + private suspend fun performAccessibilityLongPress(x: Int, y: Int): Boolean { + return try { + UIHierarchyManager.performLongPress(context, x, y) + } catch (e: Exception) { + AppLogger.e(TAG, "Error performing accessibility long press", e) + return false + } + } + + // 使用无障碍服务执行滑动的辅助方法 + private suspend fun performAccessibilitySwipe( + startX: Int, + startY: Int, + endX: Int, + endY: Int, + duration: Int + ): Boolean { + return try { + UIHierarchyManager.performSwipe(context, startX, startY, endX, endY, duration.toLong()) + } catch (e: Exception) { + AppLogger.e(TAG, "Error performing accessibility swipe", e) + return false + } + } + + protected fun accessibilityKeyAction(keyCode: String): Int? = when (keyCode) { + "KEYCODE_BACK" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_BACK + "KEYCODE_HOME" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_HOME + "KEYCODE_RECENTS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_RECENTS + "KEYCODE_NOTIFICATIONS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS + "KEYCODE_QUICK_SETTINGS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS + "KEYCODE_POWER_DIALOG" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_POWER_DIALOG + else -> null + } + + /** 模拟按键操作 */ + private suspend fun pressKeyWithAccessibility(tool: AITool): ToolResult { + val keyCode = tool.parameters.find { it.name == "key_code" }?.value + + if (keyCode == null) { + return ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Missing 'key_code' parameter." + ) + } + + try { + // 将字符串keyCode转换为AccessibilityService中的常量 + val keyAction = accessibilityKeyAction(keyCode) + + if (keyAction != null) { + // 通过UIHierarchyManager请求远程服务执行操作 + val success = UIHierarchyManager.performGlobalAction(context, keyAction) + return if (success) { + ToolResult( + toolName = tool.name, + success = true, + result = + UIActionResultData( + actionType = "keyPress", + actionDescription = + "Successfully pressed key: $keyCode via accessibility service" + ), + error = "" + ) + } else { + ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = + "Failed to press key: $keyCode via accessibility service. Not all keys are supported." + ) + } + } else { + // 如果不是标准全局操作,返回不支持的错误 + return ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = + "Key: $keyCode is not supported via accessibility service. Only system keys like BACK, HOME, etc. are supported." + ) + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error pressing key", e) + return ToolResult( + toolName = tool.name, + success = false, + result = StringResultData(""), + error = "Error pressing key: ${e.message ?: "Unknown exception"}" + ) + } + } + + private suspend fun captureScreenshotToFileWithAccessibility(tool: AITool): Pair?> { + return try { + val screenshotDir = OperitPaths.cleanOnExitDir() + + val shortName = System.currentTimeMillis().toString().takeLast(4) + val file = File(screenshotDir, "$shortName.png") + + val success = UIHierarchyManager.takeScreenshot(context, file.absolutePath, "png") + if (!success) { + AppLogger.w(TAG, "captureScreenshotForAgent: AIDL takeScreenshot failed") + return Pair(null, null) + } + + val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } + BitmapFactory.decodeFile(file.absolutePath, options) + val dimensions = if (options.outWidth > 0 && options.outHeight > 0) { + Pair(options.outWidth, options.outHeight) + } else { + null + } + + Pair(file.absolutePath, dimensions) + } catch (e: Exception) { + AppLogger.e(TAG, "captureScreenshot via accessibility failed", e) + Pair(null, null) + } + } + + private suspend fun captureScreenshotWithAccessibility(tool: AITool): Pair?> { + return captureScreenshotToFile(tool) + } + + private suspend fun captureScreenshotBitmapWithAccessibility(tool: AITool): Pair?> { + val (filePath, dimensions) = captureScreenshot(tool) + if (filePath == null) { + return Pair(null, dimensions) + } + + val bitmap = BitmapFactory.decodeFile(filePath) ?: return Pair(null, dimensions) + val resolvedDimensions = dimensions ?: Pair(bitmap.width, bitmap.height) + return Pair(bitmap, resolvedDimensions) + } + + private fun parseBounds(boundsString: String): android.graphics.Rect { + // 解析 "[left,top][right,bottom]" 格式的边界字符串 + val rect = android.graphics.Rect() + try { + val parts = boundsString.replace("[", "").replace("]", ",").split(",") + if (parts.size >= 4) { + rect.left = parts[0].toInt() + rect.top = parts[1].toInt() + rect.right = parts[2].toInt() + rect.bottom = parts[3].toInt() + } + } catch (e: Exception) { + AppLogger.e(TAG, "Error parsing bounds: $boundsString", e) + } + return rect + } } diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootUITools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootUITools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt index eeaf1a9c1b..b25d28e443 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootUITools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.root +package com.ai.assistance.operit.core.tools.builtin.ui import android.content.ClipData import android.content.ClipboardManager @@ -8,9 +8,9 @@ import com.ai.assistance.operit.core.tools.SimplifiedUINode import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.UIActionResultData import com.ai.assistance.operit.core.tools.UIPageResultData -import com.ai.assistance.operit.core.tools.defaultTool.admin.AdminUITools +import com.ai.assistance.operit.core.tools.builtin.ui.AdminUITools import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult @@ -21,10 +21,7 @@ import kotlinx.coroutines.withContext import org.xmlpull.v1.XmlPullParser import org.xmlpull.v1.XmlPullParserFactory -/** - * Root-level UI tools that use shell commands (uiautomator, input) for robust UI automation. - * This implementation is modeled after DebuggerUITools but operates without accessibility fallbacks. - */ +/** Root UI 工具复用管理员公共实现,并按 Root 能力执行界面操作。 */ open class RootUITools(context: Context) : AdminUITools(context) { companion object { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt index 0b48cc51be..405d969f82 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.ui import android.content.Context import android.graphics.Bitmap @@ -12,10 +12,10 @@ import com.ai.assistance.operit.core.tools.SimplifiedUINode import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.UIPageResultData import com.ai.assistance.operit.core.tools.AppListData -import com.ai.assistance.operit.core.tools.defaultTool.ToolGetter -import com.ai.assistance.operit.core.tools.system.MediaProjectionCaptureManager -import com.ai.assistance.operit.core.tools.system.MediaProjectionHolder -import com.ai.assistance.operit.core.tools.system.ScreenCaptureActivity +import com.ai.assistance.operit.core.tools.builtin.ToolGetter +import com.ai.assistance.operit.core.tools.system.capture.MediaProjectionCaptureManager +import com.ai.assistance.operit.core.tools.system.capture.MediaProjectionHolder +import com.ai.assistance.operit.core.tools.system.capture.ScreenCaptureActivity import kotlinx.coroutines.delay import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.FunctionType @@ -56,7 +56,7 @@ open class StandardUITools(protected val context: Context) : ToolImplementations private const val TAG = "UITools" private const val COMMAND_TIMEOUT_SECONDS = 10L private const val OPERATION_NOT_SUPPORTED = - "This operation is not supported in the standard version. Please use the accessibility or debugger version." + "This operation is not supported in the standard version. Please select administrator or root mode and grant the required authorization." internal val APP_PACKAGES: MutableMap = mutableMapOf( diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/CookiePrivacyManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/CookiePrivacyManager.kt similarity index 92% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/CookiePrivacyManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/CookiePrivacyManager.kt index 34ec15bc3c..350c0e9e82 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/CookiePrivacyManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/CookiePrivacyManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.web import android.webkit.CookieManager import kotlin.coroutines.resume diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt similarity index 90% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt index 7ebd2565d6..3f7b495d4d 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.web import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -41,11 +41,11 @@ import android.webkit.WebViewClient import com.ai.assistance.operit.R import com.ai.assistance.operit.core.application.ActivityLifecycleManager import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.* -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallSourceType -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime.WebSessionUserscriptManager -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage.UserscriptRepository +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor + +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallSourceType +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime.WebSessionUserscriptManager +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage.UserscriptRepository import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.logging.AppLogger @@ -69,6 +69,84 @@ import kotlinx.coroutines.runBlocking import androidx.core.content.ContextCompat import org.json.JSONArray import org.json.JSONObject +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserConsoleEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserNavigationPolicy +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserNetworkRequestEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserPageRegistry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserSnapshot +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.PendingAsyncJsCall +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.PendingDialog +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.PendingExternalOpenRequest +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebDownloadEvent +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBrowserHost +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionHistoryStore +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.activateSessionOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.applyViewportOverride +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.boolParam +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.browserRefResolverScript +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.buildBrowserResponse +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.buildClickCode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.buildPageRegistry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.buildSettledBrowserResponse +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.buildWaitForCode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.captureActionMarkers +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.captureSnapshotModel +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.captureSnapshotText +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.closeSession +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.createSessionTabOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.currentTabIndex +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.ensureDesktopModeInitialized +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.ensureOverlayPermission +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.ensureSessionAttachedOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.error +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.evaluateJavascriptAsync +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.evaluatePageFunction +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.extractAsyncJsValue +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.fillFormFields +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.formatBrowserFileLink +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.getSession +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.handleUserscriptDownloadOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.initializeBrowserDownloadSupport +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.intParam +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.latestBrowserDownloadEventAfter +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.latestSnapshot +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.locatorExpressionForRef +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.navigateSessionOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.notifySessionStateChanged +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.ok +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.openUserscriptSheetOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.openUserscriptTabOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.orderedSessionIds +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.pageError +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.param +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.parseFormFields +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.parseHeaders +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.parseStringArrayParam +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.pressKeyOnPage +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.quoteJsCode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.refreshNavigationStateAsync +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.refreshSessionUiOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderAllConsoleMessages +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderJsArrayCode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderManagedDownloads +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderModalState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderNetworkRequestLog +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderOpenTabs +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.renderPageState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.requireSnapshotNode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.resolveElementRect +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.resolvePendingDialogOnMain +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.resolvePreferredSessionId +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.runPlaywrightLikeCode +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.selectOptionsByRef +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.sessionById +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.sessionIdAtIndex +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.settleBrowserAction +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.takeScreenshot +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.typeIntoElementByRef +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.waitForDocumentReady +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.waitForTextState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.writeBrowserTextOutput class StandardBrowserSessionTools(internal val context: Context) : ToolExecutor { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt index d07f88e73e..f575a87f7e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.web import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt index 74bb0ddf71..cdcdc90720 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.web import android.content.Context import android.graphics.Color as AndroidColor @@ -67,7 +67,7 @@ import androidx.savedstate.SavedStateRegistryOwner import androidx.savedstate.setViewTreeSavedStateRegistryOwner import com.ai.assistance.operit.R import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.core.tools.VisitWebResultData import com.ai.assistance.operit.data.preferences.DisplayPreferencesManager import com.ai.assistance.operit.data.model.AITool diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserDownloadSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserDownloadSupport.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserDownloadSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserDownloadSupport.kt index 869c159637..db3f45711c 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserDownloadSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserDownloadSupport.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -10,7 +10,7 @@ import android.os.Environment import android.webkit.MimeTypeMap import androidx.core.content.FileProvider import com.ai.assistance.operit.core.application.ActivityLifecycleManager -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardBrowserSessionTools +import com.ai.assistance.operit.core.tools.builtin.web.StandardBrowserSessionTools import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.util.network.HttpMultiPartDownloader import java.io.File diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicy.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicy.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicy.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicy.kt index e15df71a2c..4c5e2499fd 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicy.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicy.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser /** 自动开窗按文档限流;外部请求的抑制跨重定向保留,用户主动操作仍可重试。 */ internal class BrowserNavigationPolicy { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserPageExecutionSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserPageExecutionSupport.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserPageExecutionSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserPageExecutionSupport.kt index 8274eee0f2..9e73576753 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserPageExecutionSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserPageExecutionSupport.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -20,7 +20,7 @@ import android.webkit.URLUtil import android.webkit.WebView import com.ai.assistance.operit.R import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardBrowserSessionTools +import com.ai.assistance.operit.core.tools.builtin.web.StandardBrowserSessionTools import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserToolSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserToolSupport.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserToolSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserToolSupport.kt index 122b01882b..08f703a83a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserToolSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserToolSupport.kt @@ -1,10 +1,10 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import android.webkit.JsPromptResult import android.webkit.JsResult import android.webkit.WebResourceRequest import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardBrowserSessionTools +import com.ai.assistance.operit.core.tools.builtin.web.StandardBrowserSessionTools import java.util.Locale import java.util.concurrent.CountDownLatch import org.json.JSONArray @@ -193,7 +193,7 @@ internal fun StandardBrowserSessionTools.recordNetworkRequest( val headers = request.requestHeaders?.mapKeys { it.key ?: "" } ?: emptyMap() val acceptHeader = headers.entries.firstOrNull { it.key.equals("Accept", ignoreCase = true) }?.value val entry = - com.ai.assistance.operit.core.tools.defaultTool.websession.browser.BrowserNetworkRequestEntry( + com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserNetworkRequestEntry( method = request.method.orEmpty().ifBlank { "GET" }, url = url, isMainFrame = request.isForMainFrame, diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserWebViewSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserWebViewSupport.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserWebViewSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserWebViewSupport.kt index 063b3090ce..4bec95d159 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserWebViewSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserWebViewSupport.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -31,8 +31,8 @@ import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature import com.ai.assistance.operit.R import com.ai.assistance.operit.core.application.ActivityLifecycleManager -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardBrowserSessionTools -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallSourceType +import com.ai.assistance.operit.core.tools.builtin.web.StandardBrowserSessionTools +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallSourceType import com.ai.assistance.operit.util.logging.AppLogger import java.util.LinkedHashSet import java.util.Locale diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHost.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHost.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHost.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHost.kt index 12c97a6282..c5e3b3cc25 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHost.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHost.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import com.ai.assistance.operit.ui.common.oktoast.OKToast @@ -38,7 +38,7 @@ import androidx.savedstate.SavedStateRegistryController import androidx.savedstate.SavedStateRegistryOwner import androidx.savedstate.setViewTreeSavedStateRegistryOwner import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui.WebSessionUserscriptUiStateStore +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui.WebSessionUserscriptUiStateStore import com.ai.assistance.operit.ui.features.automation.websession.browser.WebSessionBrowserScreen import com.ai.assistance.operit.ui.features.automation.websession.browser.WebSessionFloatingTheme import com.ai.assistance.operit.ui.features.automation.websession.browser.WebSessionMinimizedIndicator diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHostState.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHostState.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHostState.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHostState.kt index 0ce2e9ae88..05fcfb6047 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHostState.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHostState.kt @@ -1,7 +1,7 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import androidx.compose.runtime.Immutable -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageMenuCommand +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageMenuCommand import kotlinx.serialization.Serializable internal enum class WebSessionBrowserSheetRoute { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionHistoryStore.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionHistoryStore.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionHistoryStore.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionHistoryStore.kt index 1597351317..79fde8654d 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionHistoryStore.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionHistoryStore.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import android.content.Context import android.net.Uri diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionPermissionRequestActivity.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionPermissionRequestActivity.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionPermissionRequestActivity.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionPermissionRequestActivity.kt index c1308c13f0..483876924b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionPermissionRequestActivity.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionPermissionRequestActivity.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionWebViewHost.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionWebViewHost.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionWebViewHost.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionWebViewHost.kt index a5531f81b0..ecce49dedc 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionWebViewHost.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionWebViewHost.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import android.view.Gravity import android.view.View diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptCapabilityRegistry.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptCapabilityRegistry.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptCapabilityRegistry.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptCapabilityRegistry.kt index 655dcae7e4..bebc0abffa 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptCapabilityRegistry.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptCapabilityRegistry.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript import androidx.webkit.WebViewFeature diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMatcher.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMatcher.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMatcher.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMatcher.kt index fc442881be..54c6659359 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMatcher.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMatcher.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript import android.net.Uri import java.util.Locale diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMetadataParser.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMetadataParser.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMetadataParser.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMetadataParser.kt index 2b4ef86a3b..79c353577b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMetadataParser.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMetadataParser.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript internal object UserscriptMetadataParser { private val metadataBlockRegex = diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptModels.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptModels.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptModels.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptModels.kt index fdb8db6c50..b2fda1d2fb 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptModels.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptModels.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportCoordinator.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportCoordinator.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportCoordinator.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportCoordinator.kt index 7a673471a6..2c9eed8b40 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportCoordinator.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportCoordinator.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.install +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.install import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportPickerActivity.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportPickerActivity.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportPickerActivity.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportPickerActivity.kt index 7172e9eb53..7199befe5e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportPickerActivity.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportPickerActivity.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.install +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.install import android.content.Intent import android.database.Cursor diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptBootstrapScript.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptBootstrapScript.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptBootstrapScript.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptBootstrapScript.kt index 88aee41e72..03564cbf3d 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptBootstrapScript.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptBootstrapScript.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime internal object UserscriptBootstrapScript { const val BRIDGE_NAME = "OperitUserscriptBridge" diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptCookieService.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptCookieService.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptCookieService.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptCookieService.kt index 3f73d1103e..af4060108b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptCookieService.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptCookieService.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime import android.webkit.CookieManager import java.net.HttpCookie diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptStorageNotifier.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptStorageNotifier.kt similarity index 88% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptStorageNotifier.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptStorageNotifier.kt index f5691d4c06..4b82855a52 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptStorageNotifier.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptStorageNotifier.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime import org.json.JSONObject diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptTabStateStore.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptTabStateStore.kt similarity index 91% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptTabStateStore.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptTabStateStore.kt index 57bd81a114..1aacefd0e0 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptTabStateStore.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptTabStateStore.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime import java.util.concurrent.ConcurrentHashMap diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptWebRequestEngine.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptWebRequestEngine.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptWebRequestEngine.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptWebRequestEngine.kt index f7c6af1706..3538e21c8a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptWebRequestEngine.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptWebRequestEngine.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime import java.util.Locale import java.util.UUID diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/WebSessionUserscriptManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/WebSessionUserscriptManager.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/WebSessionUserscriptManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/WebSessionUserscriptManager.kt index bcb5557e2f..0dee751499 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/WebSessionUserscriptManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/WebSessionUserscriptManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime import android.Manifest import android.app.NotificationChannel @@ -22,19 +22,19 @@ import androidx.webkit.WebMessageCompat import androidx.webkit.WebViewCompat import androidx.webkit.WebViewFeature import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ParsedUserscriptMetadata -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptCapabilityRegistry -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallPreview -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallSourceType -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptListItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptMatcher -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageMenuCommand -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageRuntimeState -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageRuntimeStatus -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptSupportState -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.install.UserscriptImportCoordinator -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage.UserscriptRepository -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui.WebSessionUserscriptUiStateStore +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ParsedUserscriptMetadata +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptCapabilityRegistry +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallPreview +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallSourceType +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptListItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptMatcher +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageMenuCommand +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageRuntimeState +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageRuntimeStatus +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptSupportState +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.install.UserscriptImportCoordinator +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage.UserscriptRepository +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui.WebSessionUserscriptUiStateStore import com.ai.assistance.operit.util.logging.AppLogger import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptEntities.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptEntities.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptEntities.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptEntities.kt index 97c2ac59bb..789e9c0e03 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptEntities.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptEntities.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptJsonStore.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptJsonStore.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptJsonStore.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptJsonStore.kt index 6c80a7ff20..9daa1c530f 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptJsonStore.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptJsonStore.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage import android.content.Context import com.ai.assistance.operit.util.files.OperitPaths diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptRepository.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptRepository.kt similarity index 94% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptRepository.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptRepository.kt index 497f808b8f..206216451b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptRepository.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptRepository.kt @@ -1,22 +1,22 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage import android.content.Context import android.util.Base64 import android.webkit.MimeTypeMap -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ParsedUserscriptMetadata -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptCapabilityRegistry -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptBootstrapPayload -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptExecutionPayload -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallPreview -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallSourceType -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptListItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptLogItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptMatcher -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptMetadataParser -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptRequireEntry -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptResourceEntry -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptResourcePayload -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptRunAt +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ParsedUserscriptMetadata +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptCapabilityRegistry +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptBootstrapPayload +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptExecutionPayload +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallPreview +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallSourceType +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptListItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptLogItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptMatcher +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptMetadataParser +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptRequireEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptResourceEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptResourcePayload +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptRunAt import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.util.files.OperitPaths import java.io.File diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/ui/WebSessionUserscriptUiStateStore.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/ui/WebSessionUserscriptUiStateStore.kt similarity index 73% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/ui/WebSessionUserscriptUiStateStore.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/ui/WebSessionUserscriptUiStateStore.kt index b9a43c28c2..4511076bd5 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/ui/WebSessionUserscriptUiStateStore.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/ui/WebSessionUserscriptUiStateStore.kt @@ -1,10 +1,10 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui +package com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallPreview -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptListItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptLogItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageRuntimeStatus -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptSupportState +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallPreview +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptListItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptLogItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageRuntimeStatus +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptSupportState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWorkflowTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/workflow/StandardWorkflowTools.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWorkflowTools.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/builtin/workflow/StandardWorkflowTools.kt index 0dfeee29ae..dc9d803eed 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWorkflowTools.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/builtin/workflow/StandardWorkflowTools.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.workflow import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/climode/CliToolModeSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/climode/CliToolModeSupport.kt index cf19e26f74..c74247bf28 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/climode/CliToolModeSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/climode/CliToolModeSupport.kt @@ -5,7 +5,7 @@ import com.ai.assistance.operit.core.config.SystemToolPrompts import com.ai.assistance.operit.core.tools.PackageTool import com.ai.assistance.operit.core.tools.PackageToolParameter import com.ai.assistance.operit.core.tools.ToolPackage -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.mcp.MCPLocalServer import com.ai.assistance.operit.data.model.ApiProviderType import com.ai.assistance.operit.data.model.SystemToolPromptCategory diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityDeviceInfoToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityDeviceInfoToolExecutor.kt deleted file mode 100644 index 79ff4fbfbc..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityDeviceInfoToolExecutor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.accessbility - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardDeviceInfoToolExecutor - -/** 无障碍级别的设备信息工具,继承标准版本 */ -open class AccessibilityDeviceInfoToolExecutor(context: Context) : StandardDeviceInfoToolExecutor(context) { - // 当前阶段不添加新功能,仅继承标准实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityFileSystemTools.kt deleted file mode 100644 index e578f318ef..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityFileSystemTools.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.accessbility - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardFileSystemTools - -/** 无障碍级别的文件系统工具,继承标准版本 */ -open class AccessibilityFileSystemTools(context: Context) : StandardFileSystemTools(context) { - // 当前阶段不添加新功能,仅继承标准实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilitySystemOperationTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilitySystemOperationTools.kt deleted file mode 100644 index 872085cc32..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilitySystemOperationTools.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.accessbility - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardSystemOperationTools - -/** 无障碍级别的系统操作工具,继承标准版本 */ -open class AccessibilitySystemOperationTools(context: Context) : - StandardSystemOperationTools(context) { - // 当前阶段不添加新功能,仅继承标准实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityUITools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityUITools.kt deleted file mode 100644 index b21d94d4dd..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityUITools.kt +++ /dev/null @@ -1,790 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.accessbility - -import android.content.Context -import android.graphics.Bitmap -import android.graphics.BitmapFactory -import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.SimplifiedUINode -import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.UIActionResultData -import com.ai.assistance.operit.core.tools.UIPageResultData -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardUITools -import com.ai.assistance.operit.data.model.AITool -import com.ai.assistance.operit.data.model.ToolResult -import com.ai.assistance.operit.data.repository.UIHierarchyManager -import com.ai.assistance.operit.util.files.OperitPaths -import java.io.File -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import com.ai.assistance.operit.util.media.ImagePoolManager -import java.io.StringReader -import org.json.JSONObject -import org.xmlpull.v1.XmlPullParser -import org.xmlpull.v1.XmlPullParserFactory -import kotlinx.coroutines.delay - -/** 无障碍级别的UI工具,使用Android无障碍服务API实现UI操作 */ -open class AccessibilityUITools(context: Context) : StandardUITools(context) { - - companion object { - private const val TAG = "AccessibilityUITools" - private const val MAX_RETRY_COUNT = 3 - private const val RETRY_DELAY_MS = 300L - } - - /** - * 检查无障碍服务是否正在运行 - */ - private suspend fun isAccessibilityServiceEnabled(): Boolean { - return UIHierarchyManager.isAccessibilityServiceEnabled(context) - } - - /** - * 为需要无障碍服务的工具创建一个前置检查的包装器 - */ - private suspend fun withAccessibilityCheck(tool: AITool, block: suspend () -> T): T { - if (!isAccessibilityServiceEnabled()) { - throw IllegalStateException("Accessibility Service is not enabled. Please enable it in system settings to use this feature.") - } - return block() - } - - /** - * 获取UI层次结构,失败时重试 - * @return UI层次结构XML字符串,获取失败返回空字符串 - */ - private suspend fun getUIHierarchyWithRetry(): String { - var retryCount = 0 - var uiXml = "" - - while (retryCount < MAX_RETRY_COUNT) { - uiXml = UIHierarchyManager.getUIHierarchy(context) - if (uiXml.isNotEmpty()) { - return uiXml - } - - retryCount++ - if (retryCount < MAX_RETRY_COUNT) { - AppLogger.d(TAG, "获取UI层次结构失败,正在重试 #$retryCount") - delay(RETRY_DELAY_MS) - } - } - - AppLogger.w(TAG, "获取UI层次结构失败,已重试${MAX_RETRY_COUNT}次") - return uiXml - } - - /** Gets the current UI page/window information */ - override suspend fun getPageInfo(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val format = tool.parameters.find { it.name == "format" }?.value ?: "xml" - val detail = tool.parameters.find { it.name == "detail" }?.value ?: "summary" - - if (format !in listOf("xml", "json")) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Invalid format specified. Must be 'xml' or 'json'." - ) - } - - // 使用无障碍服务获取UI数据(带重试) - val uiXml = getUIHierarchyWithRetry() - if (uiXml.isEmpty()) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Failed to retrieve UI data via accessibility service." - ) - } - - // 解析当前窗口信息 - val focusInfo = extractFocusInfoFromAccessibility() - - // 简化布局信息 - val simplifiedLayout = simplifyLayout(uiXml) - - // 创建结构化数据 - val resultData = - UIPageResultData( - packageName = focusInfo.packageName ?: "Unknown", - activityName = focusInfo.activityName ?: "Unknown", - uiElements = simplifiedLayout - ) - - ToolResult(toolName = tool.name, success = true, result = resultData, error = "") - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error getting page info", e) - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error getting page info: ${e.message}" - ) - } - } - - /** 从无障碍服务获取焦点信息 */ - private suspend fun extractFocusInfoFromAccessibility(): FocusInfo { - val focusInfo = FocusInfo() - try { - // 1. 获取UI层次结构的XML快照(带重试) - val hierarchyXml = getUIHierarchyWithRetry() - if (hierarchyXml.isEmpty()) { - AppLogger.w(TAG, "无法获取UI层次结构XML,使用默认值。") - focusInfo.packageName = "android" - // 即使XML获取失败,仍然尝试获取Activity名称 - focusInfo.activityName = UIHierarchyManager.getCurrentActivityName(context) ?: "ForegroundActivity" - return focusInfo - } - - // 2. 从XML中解析包名 - val (packageName, _) = UIHierarchyManager.extractWindowInfo(hierarchyXml) - // 3. 从服务中直接获取当前Activity名称 - val activityName = UIHierarchyManager.getCurrentActivityName(context) - - focusInfo.packageName = packageName - focusInfo.activityName = activityName // 使用从服务获取的Activity名称 - - // 如果没有获取到,使用默认值 - if (focusInfo.packageName == null) focusInfo.packageName = "android" - if (focusInfo.activityName == null) focusInfo.activityName = "ForegroundActivity" - } catch (e: Exception) { - AppLogger.e(TAG, "从XML解析焦点信息时出错", e) - // 设置默认值 - focusInfo.packageName = "android" - focusInfo.activityName = "ForegroundActivity" - } - return focusInfo - } - - /** 简化XML布局为节点树 */ - fun simplifyLayout(xml: String): SimplifiedUINode { - val factory = XmlPullParserFactory.newInstance().apply { isNamespaceAware = false } - val parser = factory.newPullParser().apply { setInput(StringReader(xml)) } - - val nodeStack = mutableListOf() - var rootNode: UINode? = null - - while (parser.eventType != XmlPullParser.END_DOCUMENT) { - when (parser.eventType) { - XmlPullParser.START_TAG -> { - if (parser.name == "node") { - val newNode = createNode(parser) - if (rootNode == null) { - rootNode = newNode - nodeStack.add(newNode) - } else { - nodeStack.lastOrNull()?.children?.add(newNode) - nodeStack.add(newNode) - } - } - } - XmlPullParser.END_TAG -> { - if (parser.name == "node") { - nodeStack.removeLastOrNull() - } - } - } - parser.next() - } - - return rootNode?.toUINode() - ?: SimplifiedUINode( - className = null, - text = null, - contentDesc = null, - resourceId = null, - bounds = null, - isClickable = false, - children = emptyList() - ) - } - - private fun createNode(parser: XmlPullParser): UINode { - // 解析关键属性 - val className = parser.getAttributeValue(null, "class")?.substringAfterLast('.') - val text = parser.getAttributeValue(null, "text")?.replace(" ", "\n") - val contentDesc = parser.getAttributeValue(null, "content-desc") - val resourceId = parser.getAttributeValue(null, "resource-id") - val bounds = parser.getAttributeValue(null, "bounds") - val isClickable = parser.getAttributeValue(null, "clickable") == "true" - - return UINode( - className = className, - text = text, - contentDesc = contentDesc, - resourceId = resourceId, - bounds = bounds, - isClickable = isClickable - ) - } - - /** 点击元素 */ - override suspend fun clickElement(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val resourceId = tool.parameters.find { it.name == "resourceId" }?.value - val className = tool.parameters.find { it.name == "className" }?.value - val contentDesc = tool.parameters.find { it.name == "contentDesc" }?.value - val index = tool.parameters.find { it.name == "index" }?.value?.toIntOrNull() ?: 0 - val bounds = tool.parameters.find { it.name == "bounds" }?.value - - if (resourceId == null && className == null && bounds == null && contentDesc == null) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Missing element identifier. Provide at least one of 'resourceId', 'className', 'contentDesc', or 'bounds'." - ) - } - - // 如果提供了边界坐标,直接解析并点击中心点 - if (bounds != null) { - return@withAccessibilityCheck handleClickByBounds(tool, bounds) - } - - // 获取UI层次结构XML(带重试) - val uiXml = getUIHierarchyWithRetry() - if (uiXml.isEmpty()) { - return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Unable to get UI hierarchy.") - } - - // 在XML中查找匹配的节点 - val matchedNodes = findNodesInXml(uiXml) { parser -> - val hasSelectors = resourceId != null || className != null || contentDesc != null - if (!hasSelectors) { - return@findNodesInXml false - } - - val actualId = parser.getAttributeValue(null, "resource-id") - val actualClass = parser.getAttributeValue(null, "class") - val actualDesc = parser.getAttributeValue(null, "content-desc") - - if(resourceId != null && (actualId == null || !actualId.endsWith(resourceId))){ - return@findNodesInXml false - } - - if(className != null && (actualClass == null || actualClass != className)){ - return@findNodesInXml false - } - - if(contentDesc != null && (actualDesc == null || !actualDesc.equals(contentDesc, ignoreCase = true))){ - return@findNodesInXml false - } - - true - } - - if (matchedNodes.isEmpty()) { - return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "No matching element found.") - } - - // 检查索引是否有效 - if (index < 0 || index >= matchedNodes.size) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Index out of range. Found ${matchedNodes.size} elements, but requested index $index." - ) - } - - // 获取目标节点的bounds - val targetNodeBounds = matchedNodes[index].bounds - if (targetNodeBounds == null) { - return@withAccessibilityCheck ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Target element has no bounds.") - } - - // 解析bounds并点击 - handleClickByBounds(tool, targetNodeBounds) - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error clicking element", e) - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error clicking element: ${e.message}" - ) - } - } - - private suspend fun handleClickByBounds(tool: AITool, bounds: String): ToolResult { - try { - val rect = parseBounds(bounds) - if (rect.isEmpty) { - return ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Invalid bounds format: $bounds") - } - - val centerX = rect.centerX() - val centerY = rect.centerY() - - withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } - val clickSuccess = performAccessibilityClick(centerX, centerY) - - return if (clickSuccess) { - withContext(Dispatchers.Main) { - operationOverlay.showTap(centerX, centerY) - operationOverlay.hide() - } - ToolResult( - toolName = tool.name, - success = true, - result = UIActionResultData( - actionType = "click", - actionDescription = "Successfully clicked at bounds $bounds", - coordinates = Pair(centerX, centerY) - ) - ) - } else { - operationOverlay.hide() - ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Failed to click at bounds $bounds via accessibility service.") - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error clicking by bounds", e) - operationOverlay.hide() - return ToolResult(toolName = tool.name, success = false, result = StringResultData(""), error = "Error clicking at bounds: ${e.message}") - } - } - - private fun findNodesInXml(xml: String, predicate: (parser: XmlPullParser) -> Boolean): List { - val matchedNodes = mutableListOf() - val factory = XmlPullParserFactory.newInstance().apply { isNamespaceAware = false } - val parser = factory.newPullParser().apply { setInput(StringReader(xml)) } - - while (parser.eventType != XmlPullParser.END_DOCUMENT) { - if (parser.eventType == XmlPullParser.START_TAG && parser.name == "node") { - if (predicate(parser)) { - matchedNodes.add( - NodeInfo( - bounds = parser.getAttributeValue(null, "bounds"), - text = parser.getAttributeValue(null, "text") - ) - ) - } - } - parser.next() - } - return matchedNodes - } - - private data class NodeInfo(val bounds: String?, val text: String?) - - /** 设置输入文本 */ - override suspend fun setInputText(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val text = tool.parameters.find { it.name == "text" }?.value ?: "" - - // 通过UIHierarchyManager请求远程服务找到焦点节点的ID - val focusedNodeId = UIHierarchyManager.findFocusedNodeId(context) - if (focusedNodeId.isNullOrEmpty()) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "No focused editable field found." - ) - } - - // 显示反馈 - val rect = parseBounds(focusedNodeId) - if (!rect.isEmpty) { - operationOverlay.showTextInput(rect.centerX(), rect.centerY(), text) - } - - // 通过UIHierarchyManager请求远程服务设置文本 - val result = UIHierarchyManager.setTextOnNode(context, focusedNodeId, text) - - if (result) { - // 成功后主动隐藏overlay - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = true, - result = - UIActionResultData( - actionType = "textInput", - actionDescription = - "Successfully set input text via accessibility service" - ), - error = "" - ) - } else { - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Failed to set text via accessibility service." - ) - } - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error setting input text", e) - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error setting input text: ${e.message}" - ) - } - } - - /** 执行轻触操作 */ - override suspend fun tap(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() - val y = tool.parameters.find { it.name == "y" }?.value?.toIntOrNull() - - if (x == null || y == null) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Missing or invalid coordinates. Both 'x' and 'y' must be valid integers." - ) - } - - withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } - - // 使用无障碍服务执行点击 - val result = performAccessibilityClick(x, y) - - if (result) { - withContext(Dispatchers.Main) { - operationOverlay.showTap(x, y) - operationOverlay.hide() - } - ToolResult( - toolName = tool.name, - success = true, - result = - UIActionResultData( - actionType = "tap", - actionDescription = - "Successfully tapped at coordinates ($x, $y) via accessibility service", - coordinates = Pair(x, y) - ), - error = "" - ) - } else { - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Failed to tap at coordinates via accessibility service." - ) - } - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error tapping at coordinates", e) - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error tapping at coordinates: ${e.message}" - ) - } - } - - /** 执行长按操作 */ - override suspend fun longPress(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val x = tool.parameters.find { it.name == "x" }?.value?.toIntOrNull() - val y = tool.parameters.find { it.name == "y" }?.value?.toIntOrNull() - - if (x == null || y == null) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Missing or invalid coordinates. Both 'x' and 'y' must be valid integers." - ) - } - - withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } - - // 使用无障碍服务执行长按 - val result = performAccessibilityLongPress(x, y) - - if (result) { - withContext(Dispatchers.Main) { - operationOverlay.showTap(x, y) - operationOverlay.hide() - } - ToolResult( - toolName = tool.name, - success = true, - result = - UIActionResultData( - actionType = "long_press", - actionDescription = - "Successfully long pressed at coordinates ($x, $y) via accessibility service", - coordinates = Pair(x, y) - ), - error = "" - ) - } else { - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Failed to long press at coordinates via accessibility service." - ) - } - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error long pressing at coordinates", e) - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error long pressing at coordinates: ${e.message}" - ) - } - } - - /** 执行滑动操作 */ - override suspend fun swipe(tool: AITool): ToolResult { - return try { - withAccessibilityCheck(tool) { - val startX = tool.parameters.find { it.name == "start_x" }?.value?.toIntOrNull() - val startY = tool.parameters.find { it.name == "start_y" }?.value?.toIntOrNull() - val endX = tool.parameters.find { it.name == "end_x" }?.value?.toIntOrNull() - val endY = tool.parameters.find { it.name == "end_y" }?.value?.toIntOrNull() - val duration = tool.parameters.find { it.name == "duration" }?.value?.toIntOrNull() ?: 300 - - if (startX == null || startY == null || endX == null || endY == null) { - return@withAccessibilityCheck ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Missing or invalid coordinates. 'start_x', 'start_y', 'end_x', and 'end_y' must be valid integers." - ) - } - - withContext(Dispatchers.Main) { operationOverlay.hideImmediately() } - - // 使用无障碍服务执行滑动 - val result = performAccessibilitySwipe(startX, startY, endX, endY, duration) - - if (result) { - withContext(Dispatchers.Main) { - operationOverlay.showSwipe(startX, startY, endX, endY) - operationOverlay.hide() - } - ToolResult( - toolName = tool.name, - success = true, - result = - UIActionResultData( - actionType = "swipe", - actionDescription = - "Successfully performed swipe from ($startX, $startY) to ($endX, $endY) via accessibility service" - ), - error = "" - ) - } else { - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Failed to perform swipe via accessibility service." - ) - } - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error performing swipe", e) - operationOverlay.hide() - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error performing swipe: ${e.message}" - ) - } - } - - // 使用无障碍服务执行点击的辅助方法 - private suspend fun performAccessibilityClick(x: Int, y: Int): Boolean { - return try { - UIHierarchyManager.performClick(context, x, y) - } catch (e: Exception) { - AppLogger.e(TAG, "Error performing accessibility click", e) - return false - } - } - - // 使用无障碍服务执行长按的辅助方法 - private suspend fun performAccessibilityLongPress(x: Int, y: Int): Boolean { - return try { - UIHierarchyManager.performLongPress(context, x, y) - } catch (e: Exception) { - AppLogger.e(TAG, "Error performing accessibility long press", e) - return false - } - } - - // 使用无障碍服务执行滑动的辅助方法 - private suspend fun performAccessibilitySwipe( - startX: Int, - startY: Int, - endX: Int, - endY: Int, - duration: Int - ): Boolean { - return try { - UIHierarchyManager.performSwipe(context, startX, startY, endX, endY, duration.toLong()) - } catch (e: Exception) { - AppLogger.e(TAG, "Error performing accessibility swipe", e) - return false - } - } - - protected fun accessibilityKeyAction(keyCode: String): Int? = when (keyCode) { - "KEYCODE_BACK" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_BACK - "KEYCODE_HOME" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_HOME - "KEYCODE_RECENTS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_RECENTS - "KEYCODE_NOTIFICATIONS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS - "KEYCODE_QUICK_SETTINGS" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS - "KEYCODE_POWER_DIALOG" -> android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_POWER_DIALOG - else -> null - } - - /** 模拟按键操作 */ - override suspend fun pressKey(tool: AITool): ToolResult { - val keyCode = tool.parameters.find { it.name == "key_code" }?.value - - if (keyCode == null) { - return ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Missing 'key_code' parameter." - ) - } - - try { - // 将字符串keyCode转换为AccessibilityService中的常量 - val keyAction = accessibilityKeyAction(keyCode) - - if (keyAction != null) { - // 通过UIHierarchyManager请求远程服务执行操作 - val success = UIHierarchyManager.performGlobalAction(context, keyAction) - return if (success) { - ToolResult( - toolName = tool.name, - success = true, - result = - UIActionResultData( - actionType = "keyPress", - actionDescription = - "Successfully pressed key: $keyCode via accessibility service" - ), - error = "" - ) - } else { - ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = - "Failed to press key: $keyCode via accessibility service. Not all keys are supported." - ) - } - } else { - // 如果不是标准全局操作,返回不支持的错误 - return ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = - "Key: $keyCode is not supported via accessibility service. Only system keys like BACK, HOME, etc. are supported." - ) - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error pressing key", e) - return ToolResult( - toolName = tool.name, - success = false, - result = StringResultData(""), - error = "Error pressing key: ${e.message ?: "Unknown exception"}" - ) - } - } - - override suspend fun captureScreenshotToFile(tool: AITool): Pair?> { - return try { - val screenshotDir = OperitPaths.cleanOnExitDir() - - val shortName = System.currentTimeMillis().toString().takeLast(4) - val file = File(screenshotDir, "$shortName.png") - - val success = UIHierarchyManager.takeScreenshot(context, file.absolutePath, "png") - if (!success) { - AppLogger.w(TAG, "captureScreenshotForAgent: AIDL takeScreenshot failed") - return Pair(null, null) - } - - val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } - BitmapFactory.decodeFile(file.absolutePath, options) - val dimensions = if (options.outWidth > 0 && options.outHeight > 0) { - Pair(options.outWidth, options.outHeight) - } else { - null - } - - Pair(file.absolutePath, dimensions) - } catch (e: Exception) { - AppLogger.e(TAG, "captureScreenshot via accessibility failed", e) - Pair(null, null) - } - } - - override suspend fun captureScreenshot(tool: AITool): Pair?> { - return captureScreenshotToFile(tool) - } - - override suspend fun captureScreenshotBitmap(tool: AITool): Pair?> { - val (filePath, dimensions) = captureScreenshot(tool) - if (filePath == null) { - return Pair(null, dimensions) - } - - val bitmap = BitmapFactory.decodeFile(filePath) ?: return Pair(null, dimensions) - val resolvedDimensions = dimensions ?: Pair(bitmap.width, bitmap.height) - return Pair(bitmap, resolvedDimensions) - } - - private fun parseBounds(boundsString: String): android.graphics.Rect { - // 解析 "[left,top][right,bottom]" 格式的边界字符串 - val rect = android.graphics.Rect() - try { - val parts = boundsString.replace("[", "").replace("]", ",").split(",") - if (parts.size >= 4) { - rect.left = parts[0].toInt() - rect.top = parts[1].toInt() - rect.right = parts[2].toInt() - rect.bottom = parts[3].toInt() - } - } catch (e: Exception) { - AppLogger.e(TAG, "Error parsing bounds: $boundsString", e) - } - return rect - } -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminDeviceInfoToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminDeviceInfoToolExecutor.kt deleted file mode 100644 index 8d23ab6a9d..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminDeviceInfoToolExecutor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.admin - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.debugger.DebuggerDeviceInfoToolExecutor - -/** 管理员级别的设备信息工具,继承调试版本 */ -open class AdminDeviceInfoToolExecutor(context: Context) : DebuggerDeviceInfoToolExecutor(context) { - // 当前阶段不添加新功能,仅继承调试实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminFileSystemTools.kt deleted file mode 100644 index 7dd851e1bd..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminFileSystemTools.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.admin - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.debugger.DebuggerFileSystemTools -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardFileSystemTools -import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.permissions.PermissionOperationRouter -import com.ai.assistance.operit.data.model.AITool -import com.ai.assistance.operit.data.model.ToolResult - -/** 管理员文件工具在每次操作前选择可用后端,复用现有标准和 Shell 实现。 */ -open class AdminFileSystemTools(context: Context) : DebuggerFileSystemTools(context) { - private val standardTools = StandardFileSystemTools(context) - - private suspend fun route( - readOnly: Boolean, - privileged: suspend () -> ToolResult, - standard: suspend () -> ToolResult - ): ToolResult = PermissionOperationRouter.execute( - capabilities = PermissionCapabilityResolver.shellSnapshot(context), - readOnly = readOnly, - privileged = privileged, - standard = standard, - isSuccess = { it.success } - ) - - override suspend fun listFiles(tool: AITool): ToolResult = - route(true, { super.listFiles(tool) }, { standardTools.listFiles(tool) }) - - override suspend fun readFileFull(tool: AITool): ToolResult = - route(true, { super.readFileFull(tool) }, { standardTools.readFileFull(tool) }) - - override suspend fun readFile(tool: AITool): ToolResult = - route(true, { super.readFile(tool) }, { standardTools.readFile(tool) }) - - override suspend fun readFilePart(tool: AITool): ToolResult = - route(true, { super.readFilePart(tool) }, { standardTools.readFilePart(tool) }) - - override suspend fun fileExists(tool: AITool): ToolResult = - route(true, { super.fileExists(tool) }, { standardTools.fileExists(tool) }) - - override suspend fun findFiles(tool: AITool): ToolResult = - route(true, { super.findFiles(tool) }, { standardTools.findFiles(tool) }) - - override suspend fun fileInfo(tool: AITool): ToolResult = - route(true, { super.fileInfo(tool) }, { standardTools.fileInfo(tool) }) - - override suspend fun writeFile(tool: AITool): ToolResult = - route(false, { super.writeFile(tool) }, { standardTools.writeFile(tool) }) - - override suspend fun deleteFile(tool: AITool): ToolResult = - route(false, { super.deleteFile(tool) }, { standardTools.deleteFile(tool) }) - - override suspend fun moveFile(tool: AITool): ToolResult = - route(false, { super.moveFile(tool) }, { standardTools.moveFile(tool) }) - - override suspend fun copyFile(tool: AITool): ToolResult = - route(false, { super.copyFile(tool) }, { standardTools.copyFile(tool) }) - - override suspend fun makeDirectory(tool: AITool): ToolResult = - route(false, { super.makeDirectory(tool) }, { standardTools.makeDirectory(tool) }) - - override suspend fun zipFiles(tool: AITool): ToolResult = - route(false, { super.zipFiles(tool) }, { standardTools.zipFiles(tool) }) - - override suspend fun unzipFiles(tool: AITool): ToolResult = - route(false, { super.unzipFiles(tool) }, { standardTools.unzipFiles(tool) }) - - override suspend fun openFile(tool: AITool): ToolResult = - route(false, { super.openFile(tool) }, { standardTools.openFile(tool) }) - - override suspend fun shareFile(tool: AITool): ToolResult = - route(false, { super.shareFile(tool) }, { standardTools.shareFile(tool) }) - - override suspend fun downloadFile(tool: AITool): ToolResult = - route(false, { super.downloadFile(tool) }, { standardTools.downloadFile(tool) }) -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminSystemOperationTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminSystemOperationTools.kt deleted file mode 100644 index c17312da43..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminSystemOperationTools.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.admin - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.debugger.DebuggerSystemOperationTools - -/** 管理员级别的系统操作工具,继承调试版本 */ -open class AdminSystemOperationTools(context: Context) : DebuggerSystemOperationTools(context) { - // 当前阶段不添加新功能,仅继承调试实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminUITools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminUITools.kt deleted file mode 100644 index 00f73d3118..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminUITools.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.admin - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.debugger.DebuggerUITools - -/** 管理员级别的UI工具,继承调试版本 */ -open class AdminUITools(context: Context) : DebuggerUITools(context) { - // 当前阶段不添加新功能,仅继承调试实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerDeviceInfoToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerDeviceInfoToolExecutor.kt deleted file mode 100644 index 2f7a134df3..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/DebuggerDeviceInfoToolExecutor.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.debugger - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.accessbility.AccessibilityDeviceInfoToolExecutor - -/** 调试级别的设备信息工具,继承无障碍版本 */ -open class DebuggerDeviceInfoToolExecutor(context: Context) : - AccessibilityDeviceInfoToolExecutor(context) { - // 当前阶段不添加新功能,仅继承无障碍实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootDeviceInfoToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootDeviceInfoToolExecutor.kt deleted file mode 100644 index 7777815844..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootDeviceInfoToolExecutor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.root - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.admin.AdminDeviceInfoToolExecutor - -/** Root级别的设备信息工具,继承管理员版本 */ -open class RootDeviceInfoToolExecutor(context: Context) : AdminDeviceInfoToolExecutor(context) { - // 当前阶段不添加新功能,仅继承管理员实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootFileSystemTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootFileSystemTools.kt deleted file mode 100644 index 197ead4a34..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootFileSystemTools.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.root - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.admin.AdminFileSystemTools - -/** Root级别的文件系统工具,继承管理员级别 */ -open class RootFileSystemTools(context: Context) : AdminFileSystemTools(context) { - // 当前阶段不添加新功能,仅继承管理员级别实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootSystemOperationTools.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootSystemOperationTools.kt deleted file mode 100644 index 7cfb3e35eb..0000000000 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootSystemOperationTools.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ai.assistance.operit.core.tools.defaultTool.root - -import android.content.Context -import com.ai.assistance.operit.core.tools.defaultTool.admin.AdminSystemOperationTools - -/** Root级别的系统操作工具,继承管理员版本 */ -open class RootSystemOperationTools(context: Context) : AdminSystemOperationTools(context) { - // 当前阶段不添加新功能,仅继承管理员实现 -} diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetention.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetention.kt index 9ae7b82aa3..3dc0ba5606 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetention.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetention.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.tools.javascript -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import java.util.ArrayDeque internal fun collectComposeDslActionIds(result: ToolPkgComposeDslRenderResult): Set { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsEngine.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsEngine.kt index bcf471aaed..15e3d6e49b 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsEngine.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsEngine.kt @@ -11,13 +11,13 @@ import androidx.core.content.ContextCompat import com.ai.assistance.operit.core.application.ActivityLifecycleManager import com.ai.assistance.operit.core.chat.logMessageTiming import com.ai.assistance.operit.core.chat.messageTimingNow -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_MESSAGE_PROCESSING -import com.ai.assistance.operit.core.tools.packTool.ToolPkgApiCompatibility -import com.ai.assistance.operit.core.tools.packTool.ToolPkgApiVersion -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult -import com.ai.assistance.operit.core.tools.packTool.ToolPkgRuntimeMonitor +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_MESSAGE_PROCESSING +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgApiCompatibility +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgApiVersion +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.runtime.ToolPkgRuntimeMonitor import com.ai.assistance.operit.ui.main.navigation.AppRouteDiscoveryGateway import com.ai.assistance.operit.ui.main.navigation.AppRouterGateway import com.ai.assistance.operit.ui.main.navigation.RouteEntrySource diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsNativeInterfaceDelegates.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsNativeInterfaceDelegates.kt index 914ccdce21..ee26f5acb7 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsNativeInterfaceDelegates.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsNativeInterfaceDelegates.kt @@ -10,13 +10,13 @@ import android.text.StaticLayout import android.text.TextPaint import android.text.TextUtils import android.util.Base64 -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.BinaryResultData import com.ai.assistance.operit.core.tools.BooleanResultData import com.ai.assistance.operit.core.tools.IntResultData import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.ToolResultData -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolManager.kt index 4289ddf355..572e9d4eeb 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolManager.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.tools.javascript import android.content.Context import com.ai.assistance.operit.core.tools.ScriptExecutionTraceData import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgRegistration.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgRegistration.kt index 0a4bef5661..1fa84abed9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgRegistration.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgRegistration.kt @@ -1,9 +1,9 @@ package com.ai.assistance.operit.core.tools.javascript -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_REGISTRATION_CHAT_MESSAGE_MENU_ITEM -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_REGISTRATION_CHAT_RUNTIME_HOOK -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOrigin -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOriginCodec +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_MESSAGE_MENU_ITEM +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_RUNTIME_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOriginCodec import org.json.JSONObject import org.json.JSONTokener diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/mcp/MCPToolExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/mcp/MCPToolExecutor.kt index 6e333a8382..8c184abbd9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/mcp/MCPToolExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/mcp/MCPToolExecutor.kt @@ -3,8 +3,8 @@ package com.ai.assistance.operit.core.tools.mcp import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutionLimits -import com.ai.assistance.operit.core.tools.ToolExecutor +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolExecutor import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.model.ToolValidationResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt index 5aa8805b88..89b03e0c43 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt @@ -3,11 +3,12 @@ package com.ai.assistance.operit.core.tools.packTool import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.util.logging.AppLogger import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager class PackageDebugRefreshReceiver : BroadcastReceiver() { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt index be7f7f0b13..c883957b2e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt @@ -3,11 +3,12 @@ package com.ai.assistance.operit.core.tools.packTool import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.util.logging.AppLogger import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager class ToolPkgDebugInstallReceiver : BroadcastReceiver() { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupport.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupport.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupport.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupport.kt index fc440ed9ec..84f15045a1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupport.kt @@ -1,10 +1,11 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import android.content.Context import android.net.Uri import android.provider.OpenableColumns import com.ai.assistance.operit.util.logging.AppLogger import java.io.File +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager /** 从分享或文件选择器导入外部包时的文件名判断与拷贝。 */ object PackageFileImportSupport { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletion.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletion.kt similarity index 90% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletion.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletion.kt index b1e11d80ad..d711137c71 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletion.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletion.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import java.io.File diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactory.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactory.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactory.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactory.kt index b1b2e8e0b5..85e472d31e 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactory.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactory.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import java.io.File import java.util.zip.ZipEntry diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoadOrder.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoadOrder.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoadOrder.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoadOrder.kt index f25baf0941..23764fd08a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoadOrder.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoadOrder.kt @@ -1,6 +1,9 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.loader import com.ai.assistance.operit.core.tools.ToolPackage +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgManifestRequirement +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSubpackageRuntime internal data class ToolPkgLoadOrderResult( val orderedContainers: List, diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoader.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoader.kt similarity index 89% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoader.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoader.kt index 8b1ddfcdc1..f9476608f0 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoader.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoader.kt @@ -1,10 +1,16 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.loader import android.content.Context import com.ai.assistance.operit.core.tools.ToolPackage import com.ai.assistance.operit.core.tools.javascript.JsEngine import java.io.File import java.util.zip.ZipFile +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgArchiveParser +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgLoadResult +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgMainRegistrationParseResult +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgMainRegistrationScriptParser +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgManifestPreview +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSourceType internal object ToolPkgLoader { fun loadToolPkgFromExternalFile( diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/BuiltInPackageDefaults.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/BuiltInPackageDefaults.kt similarity index 85% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/BuiltInPackageDefaults.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/BuiltInPackageDefaults.kt index 9401211ee7..37f5459271 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/BuiltInPackageDefaults.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/BuiltInPackageDefaults.kt @@ -1,6 +1,7 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import com.ai.assistance.operit.core.tools.ToolPackage +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgLoadResult /** 个人发行版的首次默认值;已保存的启停状态仍由包管理器持有。 */ internal object BuiltInPackageDefaults { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt index e595f07e96..9105937ac0 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import com.ai.assistance.operit.BuildConfig diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgCommonPluginConstants.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgCommonPluginConstants.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgCommonPluginConstants.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgCommonPluginConstants.kt index 96081f5312..05c5f24d87 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgCommonPluginConstants.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgCommonPluginConstants.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata internal const val TOOLPKG_RUNTIME_COMPOSE_DSL = "compose_dsl" diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestRequirement.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgManifestRequirement.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestRequirement.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgManifestRequirement.kt index d9be8a8dbc..8054e01238 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestRequirement.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgManifestRequirement.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOrigin.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOrigin.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOrigin.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOrigin.kt index 11714c1c82..eb6aeb2de6 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOrigin.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOrigin.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgTemplateModels.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgTemplateModels.kt similarity index 94% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgTemplateModels.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgTemplateModels.kt index ff780d8f33..0a5b0bdc46 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgTemplateModels.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgTemplateModels.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import com.ai.assistance.operit.core.tools.LocalizedText import kotlinx.serialization.SerialName diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt index 9cbf15264c..5724182885 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt @@ -1,9 +1,9 @@ package com.ai.assistance.operit.core.tools.packTool.minify import android.content.Context -import com.ai.assistance.operit.core.tools.packTool.ToolPkgArchiveParser -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOrigin -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOriginCodec +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgArchiveParser +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOriginCodec import com.ai.assistance.operit.ui.features.extensions.packages.market.PUBLISH_LOGO_MAX_BYTES import com.ai.assistance.operit.ui.features.extensions.packages.market.ToolPkgLogoAsset import java.io.ByteArrayOutputStream diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt similarity index 91% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt index 37c1cb765e..dc18a0f981 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt @@ -1,10 +1,36 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.parser import com.ai.assistance.operit.core.tools.LocalizedText import com.ai.assistance.operit.core.tools.javascript.JsEngine import com.ai.assistance.operit.util.logging.AppLogger import org.json.JSONArray import org.json.JSONObject +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_AI_PROVIDER +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_APP_LIFECYCLE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_INPUT_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_MESSAGE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_MESSAGE_MENU_ITEM +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_RUNTIME_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_VIEW_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_DESKTOP_WIDGET +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_INPUT_MENU_TOGGLE_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_MESSAGE_PROCESSING_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_NAVIGATION_ENTRY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_ESTIMATE_FINALIZE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_ESTIMATE_HISTORY_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_FINALIZE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_HISTORY_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_INPUT_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_SUMMARY_GENERATE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_SYSTEM_PROMPT_COMPOSE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_TOOL_LIFECYCLE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_TOOL_PROMPT_COMPOSE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_UI_MODULE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_UI_ROUTE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_XML_RENDER_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_RUNTIME_COMPOSE_DSL +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOriginCodec +import com.ai.assistance.operit.core.tools.packTool.metadata.buildToolPkgRouteId internal object ToolPkgMainRegistrationScriptParser { private const val TAG = "ToolPkgMainRegParser" diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt index 02063e7312..2c191fd16d 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.parser import android.content.Context import android.provider.DocumentsContract @@ -16,6 +16,40 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonPrimitive import org.hjson.JsonValue +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_NAV_SURFACE_MAIN_SIDEBAR_PLUGINS +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_NAV_SURFACE_PACKAGE_DETAILS +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_AI_PROVIDER +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_APP_LIFECYCLE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_INPUT_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_MESSAGE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_MESSAGE_MENU_ITEM +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_RUNTIME_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_CHAT_VIEW_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_DESKTOP_WIDGET +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_INPUT_MENU_TOGGLE_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_MESSAGE_PROCESSING_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_NAVIGATION_ENTRY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_ESTIMATE_FINALIZE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_ESTIMATE_HISTORY_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_FINALIZE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_HISTORY_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_PROMPT_INPUT_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_SUMMARY_GENERATE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_SYSTEM_PROMPT_COMPOSE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_TOOL_LIFECYCLE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_TOOL_PROMPT_COMPOSE_HOOK +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_UI_ROUTE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_REGISTRATION_XML_RENDER_PLUGIN +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_RUNTIME_COMPOSE_DSL +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgApiCompatibility +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgManifestRequirement +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgManifestWorkflowTemplate +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgManifestWorkspaceTemplate +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgPackageVersion +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgWorkflowTemplateRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgWorkspaceTemplateRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.buildToolPkgRouteId private val TOOLPKG_DIRECTORY_RESOURCE_MIME_TYPES = setOf( diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResult.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResult.kt similarity index 94% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResult.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResult.kt index ba3b3fab49..ff717f1ed7 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResult.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResult.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import com.ai.assistance.operit.core.tools.PackageActivationErrorCode import com.ai.assistance.operit.core.tools.PackageActivationErrorData diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManager.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManager.kt index 5df5c519d5..b4c1e9710a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import android.content.Context import com.ai.assistance.operit.core.tools.PackageActivationErrorCode @@ -10,7 +10,7 @@ import com.ai.assistance.operit.data.storage.LocalModelUsageHandle import com.ai.assistance.operit.core.chat.logMessageTiming import com.ai.assistance.operit.core.chat.messageTimingNow import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.PackageToolExecutor import com.ai.assistance.operit.core.tools.PackageTool @@ -27,7 +27,7 @@ import com.ai.assistance.operit.core.tools.skill.SkillManager import com.ai.assistance.operit.data.security.PluginDenylistRepository import com.ai.assistance.operit.data.preferences.SkillVisibilityPreferences import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.DisplayPreferencesManager import com.ai.assistance.operit.data.preferences.ApiPreferences @@ -56,6 +56,22 @@ import kotlinx.coroutines.launch import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.hjson.JsonValue +import com.ai.assistance.operit.core.tools.packTool.install.deleteInstalledPackageSources +import com.ai.assistance.operit.core.tools.packTool.loader.ToolPkgLoadOrderResolver +import com.ai.assistance.operit.core.tools.packTool.loader.ToolPkgLoader +import com.ai.assistance.operit.core.tools.packTool.metadata.BuiltInPackageDefaults +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_RUNTIME_COMPOSE_DSL +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgApiCompatibility +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgManifestRequirement +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOriginCodec +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgArchiveParser +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgLoadResult +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgManifestPreview +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgResourceRuntime +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSourceType +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSubpackageRuntime /** * Manages the loading, registration, and handling of tool packages diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManagerToolPkgFacade.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManagerToolPkgFacade.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManagerToolPkgFacade.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManagerToolPkgFacade.kt index 706d4a3a8d..0904e88a00 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManagerToolPkgFacade.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManagerToolPkgFacade.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import android.content.Context import com.ai.assistance.operit.core.chat.logMessageTiming @@ -13,6 +13,13 @@ import java.util.UUID import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_MESSAGE_PROCESSING +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_NAVIGATION_ENTRY_ACTION +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_NAV_SURFACE_PACKAGE_DETAILS +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_RUNTIME_COMPOSE_DSL +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgArchiveParser +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSourceType internal class PackageManagerToolPkgFacade( private val packageManager: PackageManager diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgHookModels.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgHookModels.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgHookModels.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgHookModels.kt index f7c63d64d6..5ff9b68fe2 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgHookModels.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgHookModels.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime /** * Mirror of ToolPkg xml_render hook result shape used by JS toolpkg. diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManager.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManager.kt index 3fc53279e8..29365c68dd 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import android.content.Context import com.ai.assistance.operit.core.tools.ToolPackage @@ -8,6 +8,10 @@ import com.ai.assistance.operit.util.logging.AppLogger import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.atomic.AtomicBoolean +import com.ai.assistance.operit.core.tools.packTool.loader.ToolPkgLoadOrderResolver +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgLoadResult +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgSubpackageRuntime /** * 一个 ToolPkg 容器当前活跃执行引擎的运行信息。 diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgRuntimeMonitor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgRuntimeMonitor.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgRuntimeMonitor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgRuntimeMonitor.kt index 76f6118e17..2ef9a43251 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgRuntimeMonitor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgRuntimeMonitor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import android.os.SystemClock import java.util.ArrayDeque diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslParser.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/uidsl/ToolPkgComposeDslParser.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslParser.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/packTool/uidsl/ToolPkgComposeDslParser.kt index 1527a90ca5..5ca9a6a062 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslParser.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/uidsl/ToolPkgComposeDslParser.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.uidsl import org.json.JSONArray import org.json.JSONObject diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidPermissionLevel.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/AndroidPermissionLevel.kt similarity index 88% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidPermissionLevel.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/permissions/AndroidPermissionLevel.kt index a3a6c1386c..62c9d9d6df 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidPermissionLevel.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/AndroidPermissionLevel.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.permissions import java.util.Locale @@ -17,7 +17,6 @@ enum class AndroidPermissionLevel { fun fromString(value: String?): AndroidPermissionLevel { return when(value?.uppercase(Locale.ROOT)) { "STANDARD" -> STANDARD - "ACCESSIBILITY", "DEBUGGER" -> ADMIN "ADMIN" -> ADMIN "ROOT" -> ROOT else -> STANDARD // 默认为最低权限 diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilities.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilities.kt index 17d4d629a5..ef2220e4d8 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilities.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilities.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.tools.permissions -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity /** 执行后端与用户模式分开,新增授权来源不需要新增用户模式。 */ enum class PermissionBackend { STANDARD, ACCESSIBILITY, SHIZUKU, ROOT } diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilityResolver.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilityResolver.kt index b2e1d41d5a..84564ffef5 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilityResolver.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilityResolver.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.core.tools.permissions import android.content.Context -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer import com.ai.assistance.operit.core.tools.system.shell.ShellExecutorFactory import com.ai.assistance.operit.data.preferences.androidPermissionPreferences import com.ai.assistance.operit.data.repository.UIHierarchyManager diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySession.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySession.kt index c30438146b..90dbf55ee4 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySession.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySession.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.permissions -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import kotlinx.coroutines.sync.Mutex /** 保存一次工具执行会话内的授权能力快照,避免每个工具重复探测系统授权。 */ diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AccessibilityProviderInstaller.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/AccessibilityProviderInstaller.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/AccessibilityProviderInstaller.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/AccessibilityProviderInstaller.kt index 57cdaadcf1..721092cf63 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AccessibilityProviderInstaller.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/AccessibilityProviderInstaller.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.permissions.authorization import android.content.Context import android.content.pm.PackageInfo diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/RootAuthorizer.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/RootAuthorizer.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/RootAuthorizer.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/RootAuthorizer.kt index beb6aeb1be..76d4652b8c 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/RootAuthorizer.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/RootAuthorizer.kt @@ -1,10 +1,10 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.permissions.authorization import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.R import com.ai.assistance.operit.core.tools.system.shell.RootShellExecutor -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import com.ai.assistance.operit.data.preferences.RootCommandExecutionMode import com.ai.assistance.operit.data.preferences.androidPermissionPreferences import com.topjohnwu.superuser.Shell diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuAuthorizer.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuAuthorizer.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuAuthorizer.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuAuthorizer.kt index 32f0b3af95..44e45a352f 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuAuthorizer.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuAuthorizer.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.permissions.authorization import android.content.Context import android.content.pm.PackageManager diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuInstaller.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuInstaller.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuInstaller.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuInstaller.kt index d795a7f4be..ab52501bf9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuInstaller.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuInstaller.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.permissions.authorization import android.content.Context import android.content.Intent diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHandler.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHandler.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHandler.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHandler.kt index cdeee5cf6e..f5b4b471df 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHandler.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHandler.kt @@ -1,9 +1,9 @@ -package com.ai.assistance.operit.core.tools +package com.ai.assistance.operit.core.tools.runtime import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.mcp.MCPManager -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilitySession import com.ai.assistance.operit.data.model.AITool @@ -23,6 +23,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking +import com.ai.assistance.operit.core.tools.StringResultData /** * Handles the extraction and execution of AI tools from responses Supports real-time streaming diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHook.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHook.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHook.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHook.kt index ef399df51c..b16a8646ce 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHook.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHook.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools +package com.ai.assistance.operit.core.tools.runtime import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolExecutionLimits.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolExecutionLimits.kt similarity index 86% rename from app/src/main/java/com/ai/assistance/operit/core/tools/ToolExecutionLimits.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolExecutionLimits.kt index 2fc2512a6c..95a300e25a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolExecutionLimits.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolExecutionLimits.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools +package com.ai.assistance.operit.core.tools.runtime object ToolExecutionLimits { const val MAX_FILE_READ_BYTES = 32_000 diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolProgressBus.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolProgressBus.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/ToolProgressBus.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolProgressBus.kt index 2a8384d0a1..ea9fbe4064 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolProgressBus.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolProgressBus.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools +package com.ai.assistance.operit.core.tools.runtime import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt index 40f88ef94a..c483893265 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools +package com.ai.assistance.operit.core.tools.runtime import android.content.Context import com.ai.assistance.operit.R @@ -7,7 +7,7 @@ import com.ai.assistance.operit.core.performance.PerformanceMonitorManager import com.ai.assistance.operit.core.chat.tools.ToolExecutionManager import com.ai.assistance.operit.core.tools.climode.CliToolModeSupport import com.ai.assistance.operit.core.tools.climode.ToolExposureMode -import com.ai.assistance.operit.core.tools.defaultTool.ToolGetter +import com.ai.assistance.operit.core.tools.builtin.ToolGetter import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult @@ -24,6 +24,9 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking import org.json.JSONArray import org.json.JSONObject +import com.ai.assistance.operit.core.tools.PerformanceMetricsResultData +import com.ai.assistance.operit.core.tools.SleepResultData +import com.ai.assistance.operit.core.tools.StringResultData /** * This file contains all tool registrations centralized for easier maintenance and integration It @@ -36,7 +39,7 @@ import org.json.JSONObject * @param context Application context for tools that need it */ fun registerAllTools(handler: AIToolHandler, context: Context) { - com.ai.assistance.operit.core.tools.defaultTool.a2ui.A2uiTools.register(handler, context) + com.ai.assistance.operit.core.tools.builtin.a2ui.A2uiTools.register(handler, context) // Helper function to wrap UI tool execution with visibility changes diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/AccessibilityActionListener.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/AccessibilityActionListener.kt index c2ebae0a34..1185f5d8ab 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/AccessibilityActionListener.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/AccessibilityActionListener.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.provider.Settings import com.ai.assistance.operit.util.logging.AppLogger import android.view.accessibility.AccessibilityEvent -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.repository.UIHierarchyManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListener.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListener.kt index ac655ddff6..9e4dee3f71 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListener.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListener.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.system.action -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel /** 通用UI操作监听接口 定义了不同权限级别UI操作监听的统一接口 */ interface ActionListener { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListenerFactory.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListenerFactory.kt index eef7ffa1e5..38fe6826d3 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListenerFactory.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionListenerFactory.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.tools.system.action import android.content.Context import com.ai.assistance.operit.core.tools.permissions.PermissionBackend import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.androidPermissionPreferences /** 监听器实例按后端缓存,授权状态不随实例一起缓存。 */ @@ -18,7 +18,7 @@ class ActionListenerFactory { val listener = when (backend) { PermissionBackend.STANDARD -> StandardActionListener(appContext) PermissionBackend.ACCESSIBILITY -> AccessibilityActionListener(appContext) - PermissionBackend.SHIZUKU -> DebuggerActionListener(appContext) + PermissionBackend.SHIZUKU -> ShizukuActionListener(appContext) PermissionBackend.ROOT -> RootActionListener(appContext) } listener.initialize() diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionManager.kt index c6a9cb813c..24eff693e9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ActionManager.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.tools.system.action import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/RootActionListener.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/RootActionListener.kt index 274dd8d8ba..2af99a38f1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/RootActionListener.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/RootActionListener.kt @@ -4,7 +4,7 @@ import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.permissions.PermissionBackend -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.core.tools.system.shell.ShellExecutorFactory import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/DebuggerActionListener.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ShizukuActionListener.kt similarity index 97% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/action/DebuggerActionListener.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ShizukuActionListener.kt index 195631086a..3376fb5749 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/DebuggerActionListener.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/ShizukuActionListener.kt @@ -4,8 +4,8 @@ import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.core.tools.permissions.PermissionBackend -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay @@ -19,9 +19,9 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach /** 基于Shizuku的UI操作监听器 作为管理员模式的 Shizuku 后端 */ -class DebuggerActionListener(private val context: Context) : ActionListener { +class ShizukuActionListener(private val context: Context) : ActionListener { companion object { - private const val TAG = "DebuggerActionListener" + private const val TAG = "ShizukuActionListener" /** 添加状态变更监听器 */ fun addStateChangeListener(listener: () -> Unit) { @@ -96,7 +96,7 @@ class DebuggerActionListener(private val context: Context) : ActionListener { // 启动系统级事件监控 startSystemEventMonitoring() - return@withContext ActionListener.ListeningResult.success(context.getString(R.string.debugger_ui_listener_started)) + return@withContext ActionListener.ListeningResult.success(context.getString(R.string.shizuku_ui_listener_started)) } catch (e: Exception) { AppLogger.e(TAG, "启动调试器UI操作监听失败", e) isListening.set(false) diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/StandardActionListener.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/StandardActionListener.kt index 7f04fa22a0..34e3450a80 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/StandardActionListener.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/action/StandardActionListener.kt @@ -4,7 +4,7 @@ import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.R import android.view.accessibility.AccessibilityEvent -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.util.concurrent.atomic.AtomicBoolean diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionCaptureManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionCaptureManager.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionCaptureManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionCaptureManager.kt index 80a61d03a4..4146d89982 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionCaptureManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionCaptureManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.capture import android.content.Context import android.graphics.Bitmap diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionHolder.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionHolder.kt similarity index 92% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionHolder.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionHolder.kt index 85aadd9a9d..c45f22a55a 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionHolder.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionHolder.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.capture import android.content.Context import android.media.projection.MediaProjection diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureActivity.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureActivity.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureActivity.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureActivity.kt index 4b5a7b51c6..4bc63abcec 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureActivity.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureActivity.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.capture import android.app.Activity import android.content.Context diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureService.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureService.kt similarity index 98% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureService.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureService.kt index 90d3cb1d1b..2d198fddf1 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureService.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureService.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.capture import android.app.Notification import android.app.NotificationChannel diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidShellExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/AndroidShellExecutor.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidShellExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/AndroidShellExecutor.kt index da63e584ba..3a6e828723 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidShellExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/AndroidShellExecutor.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.shell import android.content.Context import com.ai.assistance.operit.core.tools.permissions.PermissionBackend @@ -7,6 +7,7 @@ import com.ai.assistance.operit.core.tools.system.shell.ShellExecutor import com.ai.assistance.operit.core.tools.system.shell.ShellExecutorFactory import com.ai.assistance.operit.core.tools.system.shell.ShellProcess import com.ai.assistance.operit.data.preferences.androidPermissionPreferences +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel /** 根据模式和当前授权选择 Shell 后端;命令提交后不自动重放。 */ class AndroidShellExecutor { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/RootShellExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/RootShellExecutor.kt index 100ad2ca73..094ddd993c 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/RootShellExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/RootShellExecutor.kt @@ -3,8 +3,8 @@ package com.ai.assistance.operit.core.tools.system.shell import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import com.ai.assistance.operit.data.preferences.AndroidPermissionPreferences import com.ai.assistance.operit.data.preferences.RootCommandExecutionMode import com.ai.assistance.operit.data.preferences.androidPermissionPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutor.kt index c18b790eb4..aab3d45962 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutor.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.tools.system.shell -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity /** 通用Shell命令执行接口 定义了不同权限级别Shell操作的统一接口 */ interface ShellExecutor { diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutorFactory.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutorFactory.kt index 468e940404..a6764c90ca 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutorFactory.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShellExecutorFactory.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.core.tools.system.shell import android.content.Context import com.ai.assistance.operit.core.tools.permissions.PermissionBackend import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.androidPermissionPreferences /** 实例按后端缓存,模式到后端的选择在每次操作前重新计算。 */ @@ -17,7 +17,7 @@ class ShellExecutorFactory { val appContext = context.applicationContext val executor = when (backend) { PermissionBackend.STANDARD -> StandardShellExecutor(appContext) - PermissionBackend.SHIZUKU -> DebuggerShellExecutor(appContext) + PermissionBackend.SHIZUKU -> ShizukuShellExecutor(appContext) PermissionBackend.ROOT -> RootShellExecutor(appContext) PermissionBackend.ACCESSIBILITY -> error("Accessibility does not provide a shell backend") } diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/DebuggerShellExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShizukuShellExecutor.kt similarity index 95% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/DebuggerShellExecutor.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShizukuShellExecutor.kt index 071de7c8d3..4b9f0309b4 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/DebuggerShellExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/ShizukuShellExecutor.kt @@ -4,9 +4,9 @@ import android.content.Context import android.os.ParcelFileDescriptor import android.os.RemoteException import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import java.io.BufferedReader import java.io.IOException import java.io.InputStream @@ -38,9 +38,9 @@ import moe.shizuku.server.IRemoteProcess import moe.shizuku.server.IShizukuService /** 基于Shizuku的Shell命令执行器 作为管理员模式的 Shizuku 后端 */ -class DebuggerShellExecutor(private val context: Context) : ShellExecutor { +class ShizukuShellExecutor(private val context: Context) : ShellExecutor { companion object { - private const val TAG = "DebuggerShellExecutor" + private const val TAG = "ShizukuShellExecutor" private val serviceCache = ConcurrentHashMap() /** 添加状态变更监听器 */ @@ -449,7 +449,7 @@ class DebuggerShellExecutor(private val context: Context) : ShellExecutor { * stdout 与 stderr 必须同时消费,否则任一管道写满都会阻塞远程进程;stdin * 也必须主动关闭,否则需要 EOF 的命令会一直等待输入。 */ -private const val DEBUGGER_SHELL_TAG = "DebuggerShellExecutor" +private const val SHIZUKU_SHELL_TAG = "ShizukuShellExecutor" private const val REMOTE_PROCESS_POLL_INTERVAL_MS = 100L private const val POST_EXIT_OUTPUT_DRAIN_GRACE_MS = 1_000L private const val OUTPUT_TRUNCATION_NOTICE = @@ -553,10 +553,10 @@ private suspend fun executeRemoteProcess( // cancellation is allowed to leave this function. throw e } catch (e: RemoteException) { - AppLogger.e(DEBUGGER_SHELL_TAG, "Remote process operation failed: $command", e) + AppLogger.e(SHIZUKU_SHELL_TAG, "Remote process operation failed: $command", e) ShellExecutor.CommandResult(false, "", "Remote exception: ${e.message}") } catch (e: Exception) { - AppLogger.e(DEBUGGER_SHELL_TAG, "Remote process execution failed: $command", e) + AppLogger.e(SHIZUKU_SHELL_TAG, "Remote process execution failed: $command", e) ShellExecutor.CommandResult(false, "", "Error: ${e.message}") } finally { // Covers failures before the structured reader scope was created. @@ -585,7 +585,7 @@ private fun closeRemoteStdin(process: IRemoteProcess) { process.getOutputStream()?.close() } catch (e: Exception) { // A command may still be usable when the optional stdin descriptor is unavailable. - AppLogger.v(DEBUGGER_SHELL_TAG, "Unable to close remote stdin", e) + AppLogger.v(SHIZUKU_SHELL_TAG, "Unable to close remote stdin", e) } } @@ -594,7 +594,7 @@ private fun destroyRemoteProcess(process: IRemoteProcess?) { try { process.destroy() } catch (e: Exception) { - AppLogger.v(DEBUGGER_SHELL_TAG, "Unable to destroy remote process", e) + AppLogger.v(SHIZUKU_SHELL_TAG, "Unable to destroy remote process", e) } } @@ -603,7 +603,7 @@ private fun closeDescriptor(descriptor: ParcelFileDescriptor?, label: String) { try { descriptor.close() } catch (e: Exception) { - AppLogger.v(DEBUGGER_SHELL_TAG, "Unable to close $label", e) + AppLogger.v(SHIZUKU_SHELL_TAG, "Unable to close $label", e) } } @@ -626,9 +626,9 @@ private fun drainDescriptor( } } catch (e: IOException) { // Closing a descriptor during cancellation or post-exit cleanup is expected. - AppLogger.v(DEBUGGER_SHELL_TAG, "Reading remote $label stopped", e) + AppLogger.v(SHIZUKU_SHELL_TAG, "Reading remote $label stopped", e) } catch (e: Exception) { - AppLogger.w(DEBUGGER_SHELL_TAG, "Reading remote $label failed", e) + AppLogger.w(SHIZUKU_SHELL_TAG, "Reading remote $label failed", e) } } @@ -742,7 +742,7 @@ private class ShizukuShellProcess( completion.complete(-1) throw e } catch (e: Exception) { - AppLogger.e(DEBUGGER_SHELL_TAG, "Interactive Shizuku process failed: $command", e) + AppLogger.e(SHIZUKU_SHELL_TAG, "Interactive Shizuku process failed: $command", e) completion.complete(-1) } finally { if (!processFinished && !destroyed.get()) { @@ -771,11 +771,11 @@ private class ShizukuShellProcess( } } catch (e: IOException) { if (!destroyed.get()) { - AppLogger.v(DEBUGGER_SHELL_TAG, "Reading interactive $label stopped", e) + AppLogger.v(SHIZUKU_SHELL_TAG, "Reading interactive $label stopped", e) } } catch (e: Exception) { if (!destroyed.get()) { - AppLogger.w(DEBUGGER_SHELL_TAG, "Reading interactive $label failed", e) + AppLogger.w(SHIZUKU_SHELL_TAG, "Reading interactive $label failed", e) } } finally { channel.close() diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/StandardShellExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/StandardShellExecutor.kt index 9c1d745ac3..0e96af7072 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/StandardShellExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/StandardShellExecutor.kt @@ -2,8 +2,8 @@ package com.ai.assistance.operit.core.tools.system.shell import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import java.io.BufferedReader import java.io.InputStreamReader import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shower/OperitShowerShellRunner.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shower/OperitShowerShellRunner.kt index bf459f7fe3..13914bffe9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/shower/OperitShowerShellRunner.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/shower/OperitShowerShellRunner.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.tools.system.shower -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor -import com.ai.assistance.operit.core.tools.system.ShellIdentity as AppShellIdentity +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity as AppShellIdentity import com.ai.assistance.showerclient.ShellCommandResult import com.ai.assistance.showerclient.ShellIdentity import com.ai.assistance.showerclient.ShellRunner diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/OperitTerminalManager.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/OperitTerminalManager.kt similarity index 96% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/OperitTerminalManager.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/OperitTerminalManager.kt index a60a98ff55..cacddd8b20 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/OperitTerminalManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/OperitTerminalManager.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.terminal import android.content.Context import android.content.pm.PackageManager diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/Terminal.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/Terminal.kt similarity index 99% rename from app/src/main/java/com/ai/assistance/operit/core/tools/system/Terminal.kt rename to app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/Terminal.kt index 514d893f8e..2c2f188352 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/Terminal.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/Terminal.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.system +package com.ai.assistance.operit.core.tools.system.terminal import android.content.Context import android.os.Build diff --git a/app/src/main/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuard.kt b/app/src/main/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuard.kt index 06996dc8dd..26a74595c9 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuard.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuard.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.system.uiautomator -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/app/src/main/java/com/ai/assistance/operit/core/workflow/WorkflowExecutor.kt b/app/src/main/java/com/ai/assistance/operit/core/workflow/WorkflowExecutor.kt index 099e5cbe5d..0cebdbc0da 100644 --- a/app/src/main/java/com/ai/assistance/operit/core/workflow/WorkflowExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/core/workflow/WorkflowExecutor.kt @@ -4,7 +4,7 @@ import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.core.config.SystemToolPrompts import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ConditionNode import com.ai.assistance.operit.data.model.ConditionOperator diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPLocalServer.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPLocalServer.kt index 1f6e2d9200..fa92b3d0d7 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPLocalServer.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPLocalServer.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.SharedPreferences import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.mcp.MCPManager import com.ai.assistance.operit.core.tools.DirectoryListingData import com.ai.assistance.operit.core.tools.FileExistsData diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPRepository.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPRepository.kt index 2328d579cb..724b3ed82e 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPRepository.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/MCPRepository.kt @@ -7,7 +7,7 @@ import android.os.Environment import com.ai.assistance.operit.R import com.ai.assistance.operit.api.chat.EnhancedAIService import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.mcp.MCPManager import com.ai.assistance.operit.core.tools.mcp.MCPPackage import com.ai.assistance.operit.core.tools.mcp.McpRuntimeDescriptor diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPBridge.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPBridge.kt index 1a727896ac..75ae440d85 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPBridge.kt @@ -5,8 +5,8 @@ import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.util.files.OperitPaths import com.ai.assistance.operit.util.network.PortProcessKiller -import com.ai.assistance.operit.core.tools.system.Terminal -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.system.terminal.Terminal +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import java.io.BufferedReader diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPDeployer.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPDeployer.kt index 7736efcf9f..f086a1ff73 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPDeployer.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPDeployer.kt @@ -4,8 +4,8 @@ import android.content.Context import com.ai.assistance.operit.R import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.data.mcp.MCPLocalServer -import com.ai.assistance.operit.core.tools.system.Terminal -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.system.terminal.Terminal +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.google.gson.JsonParser diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPSharedSession.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPSharedSession.kt index 2e898ab785..374db74eeb 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPSharedSession.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPSharedSession.kt @@ -2,7 +2,7 @@ package com.ai.assistance.operit.data.mcp.plugins import android.content.Context import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock diff --git a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPStarter.kt b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPStarter.kt index 1193a6fdb7..85af0c0131 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPStarter.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/mcp/plugins/MCPStarter.kt @@ -7,7 +7,7 @@ import com.ai.assistance.operit.core.tools.mcp.MCPManager import com.ai.assistance.operit.core.tools.mcp.McpRuntimeDescriptor import com.ai.assistance.operit.data.mcp.MCPLocalServer import com.ai.assistance.operit.data.mcp.MCPRepository -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import com.ai.assistance.operit.data.mcp.createMcpConfigGson import com.google.gson.JsonParser import kotlinx.coroutines.CancellationException diff --git a/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionModeMigration.kt b/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionModeMigration.kt index 39889ce6e2..45ee0ace14 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionModeMigration.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionModeMigration.kt @@ -4,7 +4,7 @@ import androidx.datastore.core.DataMigration import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.stringPreferencesKey -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import java.util.Locale /** 只更新旧模式名称,保留 Root 设置以及其他偏好。 */ diff --git a/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionPreferences.kt b/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionPreferences.kt index 2c84d32dd0..a53e1d7528 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionPreferences.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/preferences/AndroidPermissionPreferences.kt @@ -7,7 +7,7 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first diff --git a/app/src/main/java/com/ai/assistance/operit/data/preferences/CharacterCardToolAccessResolver.kt b/app/src/main/java/com/ai/assistance/operit/data/preferences/CharacterCardToolAccessResolver.kt index f12764d79a..e210be3de0 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/preferences/CharacterCardToolAccessResolver.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/preferences/CharacterCardToolAccessResolver.kt @@ -2,7 +2,7 @@ package com.ai.assistance.operit.data.preferences import android.content.Context import com.ai.assistance.operit.core.config.SystemToolPrompts -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.CharacterCardToolAccessConfig import com.ai.assistance.operit.data.skill.SkillRepository import kotlinx.coroutines.flow.first diff --git a/app/src/main/java/com/ai/assistance/operit/data/repository/UIHierarchyManager.kt b/app/src/main/java/com/ai/assistance/operit/data/repository/UIHierarchyManager.kt index 84f19b0d1d..5d2b062942 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/repository/UIHierarchyManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/repository/UIHierarchyManager.kt @@ -15,7 +15,7 @@ import android.os.RemoteException import com.ai.assistance.operit.util.logging.AppLogger import androidx.core.content.FileProvider import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.system.AccessibilityProviderInstaller +import com.ai.assistance.operit.core.tools.permissions.authorization.AccessibilityProviderInstaller import com.ai.assistance.operit.provider.IAccessibilityProvider import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow diff --git a/app/src/main/java/com/ai/assistance/operit/data/storage/PackageSkillInventory.kt b/app/src/main/java/com/ai/assistance/operit/data/storage/PackageSkillInventory.kt index ce6ddcd92a..52012eccb7 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/storage/PackageSkillInventory.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/storage/PackageSkillInventory.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.data.storage import android.content.Context -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.skill.SkillManager import com.ai.assistance.operit.data.mcp.MCPRepository import com.ai.assistance.operit.util.files.OperitPaths diff --git a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetConfigActivity.kt b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetConfigActivity.kt index f169e19bd2..f2376fc7c1 100644 --- a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetConfigActivity.kt +++ b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetConfigActivity.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.foundation.layout.WindowInsets import androidx.lifecycle.lifecycleScope import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.ui.theme.OperitTheme import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetDslRenderer.kt b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetDslRenderer.kt index 5d4ef5d0a6..44be4b5ae2 100644 --- a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetDslRenderer.kt +++ b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetDslRenderer.kt @@ -23,11 +23,11 @@ import androidx.glance.text.FontWeight import androidx.glance.text.Text import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslParser -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslParser +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import com.ai.assistance.operit.ui.common.composedsl.normalizeToken import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetHost.kt b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetHost.kt index 48b2873b4a..41a4e75dc4 100644 --- a/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetHost.kt +++ b/app/src/main/java/com/ai/assistance/operit/integrations/appwidget/ToolPkgDesktopWidgetHost.kt @@ -3,8 +3,8 @@ package com.ai.assistance.operit.integrations.appwidget import android.appwidget.AppWidgetManager import android.content.Context import android.content.Intent -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.ui.main.MainActivity import kotlinx.coroutines.runBlocking import androidx.glance.appwidget.updateAll diff --git a/app/src/main/java/com/ai/assistance/operit/integrations/externalchat/ExternalChatRequestExecutor.kt b/app/src/main/java/com/ai/assistance/operit/integrations/externalchat/ExternalChatRequestExecutor.kt index 8af97b087f..e01a84f680 100644 --- a/app/src/main/java/com/ai/assistance/operit/integrations/externalchat/ExternalChatRequestExecutor.kt +++ b/app/src/main/java/com/ai/assistance/operit/integrations/externalchat/ExternalChatRequestExecutor.kt @@ -3,9 +3,9 @@ package com.ai.assistance.operit.integrations.externalchat import android.content.Context import com.ai.assistance.operit.core.tools.ChatListResultData import com.ai.assistance.operit.core.tools.MessageSendResultData -import com.ai.assistance.operit.core.tools.defaultTool.standard.MessageSendStreamSession -import com.ai.assistance.operit.core.tools.defaultTool.standard.MessageSendStreamStartResult -import com.ai.assistance.operit.core.tools.defaultTool.standard.StandardChatManagerTool +import com.ai.assistance.operit.core.tools.builtin.chat.MessageSendStreamSession +import com.ai.assistance.operit.core.tools.builtin.chat.MessageSendStreamStartResult +import com.ai.assistance.operit.core.tools.builtin.chat.StandardChatManagerTool import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.data.model.ToolParameter diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/lifecycle/AppLifecycleHookPluginRegistry.kt b/app/src/main/java/com/ai/assistance/operit/plugins/lifecycle/AppLifecycleHookPluginRegistry.kt index 943b75f5cc..7a3280114e 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/lifecycle/AppLifecycleHookPluginRegistry.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/lifecycle/AppLifecycleHookPluginRegistry.kt @@ -7,18 +7,18 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_CREATE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_DESTROY -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_PAUSE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_RESUME -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_START -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_ACTIVITY_ON_STOP -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_BACKGROUND -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_CREATE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_FOREGROUND -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_LOW_MEMORY -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_TERMINATE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_APPLICATION_ON_TRIM_MEMORY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_CREATE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_DESTROY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_PAUSE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_RESUME +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_START +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_ACTIVITY_ON_STOP +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_BACKGROUND +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_CREATE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_FOREGROUND +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_LOW_MEMORY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_TERMINATE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_APPLICATION_ON_TRIM_MEMORY enum class AppLifecycleEvent(val wireName: String) { APPLICATION_CREATE(TOOLPKG_EVENT_APPLICATION_ON_CREATE), diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgAiProviderRegistry.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgAiProviderRegistry.kt index 1638787c43..1568770623 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgAiProviderRegistry.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgAiProviderRegistry.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.plugins.toolpkg -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import java.util.concurrent.atomic.AtomicBoolean internal object ToolPkgAiProviderRegistry { diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatInputHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatInputHookBridge.kt index 3a91f93f67..392b794240 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatInputHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatInputHookBridge.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.plugins.toolpkg -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_CHAT_INPUT -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_CHAT_INPUT +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.R import com.ai.assistance.operit.ui.features.conversation.chat.components.style.input.common.ChatInputEvents import com.ai.assistance.operit.ui.features.conversation.chat.components.style.input.common.ChatInputHook diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageHookBridge.kt index e5b8fb10a5..4eddad97da 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageHookBridge.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.plugins.toolpkg -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_CHAT_MESSAGE -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_CHAT_MESSAGE +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.data.model.ChatMessage import com.ai.assistance.operit.util.logging.AppLogger import java.util.concurrent.atomic.AtomicBoolean diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageMenuItemBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageMenuItemBridge.kt index 0c27077234..e4016d42e3 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageMenuItemBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatMessageMenuItemBridge.kt @@ -1,10 +1,10 @@ package com.ai.assistance.operit.plugins.toolpkg import android.content.Context -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_CHAT_MESSAGE_MENU_ITEM -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_RUNTIME_COMPOSE_DSL -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_CHAT_MESSAGE_MENU_ITEM +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_RUNTIME_COMPOSE_DSL +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.data.model.ChatMessage import com.ai.assistance.operit.plugins.chatmessage.ChatMessageMenuDialogRequest import com.ai.assistance.operit.plugins.chatmessage.ChatMessageMenuItemClickResult diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatRuntimeHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatRuntimeHookBridge.kt index 43e68e0922..3a32d3d749 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatRuntimeHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatRuntimeHookBridge.kt @@ -4,9 +4,9 @@ import com.ai.assistance.operit.core.chat.hooks.ChatRuntimeHook import com.ai.assistance.operit.core.chat.hooks.ChatRuntimeHookContext import com.ai.assistance.operit.core.chat.hooks.ChatRuntimeHookEvent import com.ai.assistance.operit.core.chat.hooks.ChatRuntimeHookRegistry -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_CHAT_RUNTIME -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_CHAT_RUNTIME +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.data.model.InputProcessingState import com.ai.assistance.operit.util.logging.AppLogger import java.util.concurrent.atomic.AtomicBoolean diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatViewHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatViewHookBridge.kt index f9a3928960..8bfee67891 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatViewHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgChatViewHookBridge.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.plugins.toolpkg -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_CHAT_VIEW -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_CHAT_VIEW +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.plugins.chatview.ChatViewEvent import com.ai.assistance.operit.plugins.chatview.ChatViewHookParams import com.ai.assistance.operit.plugins.chatview.ChatViewHookPlugin diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgCommonBridgePlugin.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgCommonBridgePlugin.kt index 0be989b6df..5d09760b47 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgCommonBridgePlugin.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgCommonBridgePlugin.kt @@ -11,12 +11,12 @@ import com.ai.assistance.operit.core.chat.plugins.MessageProcessingHookParams import com.ai.assistance.operit.core.chat.plugins.MessageProcessingPlugin import com.ai.assistance.operit.core.chat.plugins.MessageProcessingPluginRegistry import com.ai.assistance.operit.core.chat.hooks.PromptTurn -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_INPUT_MENU_TOGGLE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_MESSAGE_PROCESSING -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_XML_RENDER +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_INPUT_MENU_TOGGLE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_MESSAGE_PROCESSING +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_XML_RENDER import com.ai.assistance.operit.plugins.OperitPlugin import com.ai.assistance.operit.ui.common.markdown.XmlRenderPlugin import com.ai.assistance.operit.ui.common.markdown.XmlRenderPluginRegistry @@ -27,8 +27,8 @@ import com.ai.assistance.operit.ui.features.conversation.chat.components.style.i import com.ai.assistance.operit.ui.features.conversation.chat.components.style.input.common.InputMenuTogglePluginRegistry import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.util.stream.Stream -import com.ai.assistance.operit.core.tools.packTool.ToolPkgXmlRenderHookComposeDslResult -import com.ai.assistance.operit.core.tools.packTool.ToolPkgXmlRenderHookObjectResult +import com.ai.assistance.operit.core.tools.packTool.runtime.ToolPkgXmlRenderHookComposeDslResult +import com.ai.assistance.operit.core.tools.packTool.runtime.ToolPkgXmlRenderHookObjectResult import com.ai.assistance.operit.core.tools.javascript.extractJsExecutionErrorMessage import com.ai.assistance.operit.util.stream.stream import java.util.UUID diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgHookBridgeSupport.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgHookBridgeSupport.kt index dc4229bb37..0e934d4a5d 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgHookBridgeSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgHookBridgeSupport.kt @@ -1,12 +1,12 @@ package com.ai.assistance.operit.plugins.toolpkg import com.ai.assistance.operit.core.application.OperitApplication -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.LocalizedText import com.ai.assistance.operit.core.tools.javascript.JsJavaBridgeDelegates import com.ai.assistance.operit.core.tools.javascript.extractJsExecutionErrorMessage -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import org.json.JSONArray import org.json.JSONObject import org.json.JSONTokener diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgLifecyclePlugin.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgLifecyclePlugin.kt index b281c13c19..fe5ea4831a 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgLifecyclePlugin.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgLifecyclePlugin.kt @@ -1,9 +1,9 @@ package com.ai.assistance.operit.plugins.toolpkg import com.ai.assistance.operit.core.application.OperitApplication -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime import com.ai.assistance.operit.plugins.toolpkg.sortedByToolPkgLoadOrder import com.ai.assistance.operit.plugins.OperitPlugin import com.ai.assistance.operit.plugins.lifecycle.AppLifecycleEvent diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgPromptHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgPromptHookBridge.kt index 8b3140baa7..43da11e0d6 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgPromptHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgPromptHookBridge.kt @@ -12,15 +12,15 @@ import com.ai.assistance.operit.core.chat.hooks.PromptTurn import com.ai.assistance.operit.core.chat.hooks.PromptTurnKind import com.ai.assistance.operit.core.chat.hooks.SystemPromptComposeHook import com.ai.assistance.operit.core.chat.hooks.ToolPromptComposeHook -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_PROMPT_FINALIZE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_PROMPT_ESTIMATE_FINALIZE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_PROMPT_ESTIMATE_HISTORY -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_PROMPT_HISTORY -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_PROMPT_INPUT -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_SYSTEM_PROMPT_COMPOSE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_TOOL_PROMPT_COMPOSE +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_PROMPT_FINALIZE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_PROMPT_ESTIMATE_FINALIZE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_PROMPT_ESTIMATE_HISTORY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_PROMPT_HISTORY +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_PROMPT_INPUT +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_SYSTEM_PROMPT_COMPOSE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_TOOL_PROMPT_COMPOSE import com.ai.assistance.operit.util.logging.AppLogger import java.util.concurrent.atomic.AtomicBoolean import org.json.JSONArray diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgSummaryHookBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgSummaryHookBridge.kt index 3793a0ad0f..9d8ae6cc0d 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgSummaryHookBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgSummaryHookBridge.kt @@ -6,9 +6,9 @@ import com.ai.assistance.operit.core.chat.hooks.SummaryGenerateHook import com.ai.assistance.operit.core.chat.hooks.SummaryHookContext import com.ai.assistance.operit.core.chat.hooks.SummaryHookMutation import com.ai.assistance.operit.core.chat.hooks.SummaryHookRegistry -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_SUMMARY_GENERATE +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_SUMMARY_GENERATE import com.ai.assistance.operit.data.model.FunctionType import com.ai.assistance.operit.util.logging.AppLogger import java.util.concurrent.atomic.AtomicBoolean diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgToolLifecycleBridge.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgToolLifecycleBridge.kt index f8f50cae40..86113306b2 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgToolLifecycleBridge.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ToolPkgToolLifecycleBridge.kt @@ -1,12 +1,12 @@ package com.ai.assistance.operit.plugins.toolpkg import com.ai.assistance.operit.core.application.OperitApplication -import com.ai.assistance.operit.core.tools.AIToolHook -import com.ai.assistance.operit.core.tools.AIToolHookDecision -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgContainerRuntime -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_TOOL_LIFECYCLE +import com.ai.assistance.operit.core.tools.runtime.AIToolHook +import com.ai.assistance.operit.core.tools.runtime.AIToolHookDecision +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.parser.ToolPkgContainerRuntime +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_TOOL_LIFECYCLE import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.logging.AppLogger diff --git a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ai/ToolPkgJsAiProviderService.kt b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ai/ToolPkgJsAiProviderService.kt index 7608034534..8154e89f95 100644 --- a/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ai/ToolPkgJsAiProviderService.kt +++ b/app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/ai/ToolPkgJsAiProviderService.kt @@ -2,10 +2,10 @@ package com.ai.assistance.operit.plugins.toolpkg.ai import android.content.Context import com.ai.assistance.operit.core.chat.hooks.PromptTurn -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_AI_PROVIDER_CALCULATE_INPUT_TOKENS -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_AI_PROVIDER_LIST_MODELS -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_AI_PROVIDER_SEND_MESSAGE -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_EVENT_AI_PROVIDER_TEST_CONNECTION +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_AI_PROVIDER_CALCULATE_INPUT_TOKENS +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_AI_PROVIDER_LIST_MODELS +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_AI_PROVIDER_SEND_MESSAGE +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_EVENT_AI_PROVIDER_TEST_CONNECTION import com.ai.assistance.operit.data.model.ModelConfigData import com.ai.assistance.operit.data.model.ModelOption import com.ai.assistance.operit.data.model.ModelParameter diff --git a/app/src/main/java/com/ai/assistance/operit/services/ChatServiceCore.kt b/app/src/main/java/com/ai/assistance/operit/services/ChatServiceCore.kt index af44f95dbf..25d6dd8be7 100644 --- a/app/src/main/java/com/ai/assistance/operit/services/ChatServiceCore.kt +++ b/app/src/main/java/com/ai/assistance/operit/services/ChatServiceCore.kt @@ -16,7 +16,7 @@ import com.ai.assistance.operit.services.core.ChatHistoryDelegate import com.ai.assistance.operit.services.core.MessageCoordinationDelegate import com.ai.assistance.operit.services.core.MessageProcessingDelegate import com.ai.assistance.operit.services.core.TokenStatisticsDelegate -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.ui.features.conversation.chat.viewmodel.UiStateDelegate import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.process.WorkspaceChangeTracker import com.ai.assistance.operit.util.stream.SharedStream diff --git a/app/src/main/java/com/ai/assistance/operit/services/TermuxCommandResultService.kt b/app/src/main/java/com/ai/assistance/operit/services/TermuxCommandResultService.kt index d39d3218aa..a6354219a4 100644 --- a/app/src/main/java/com/ai/assistance/operit/services/TermuxCommandResultService.kt +++ b/app/src/main/java/com/ai/assistance/operit/services/TermuxCommandResultService.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.services import android.app.IntentService import android.content.Intent import com.ai.assistance.operit.util.logging.AppLogger -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor.CommandResult +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor.CommandResult import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/app/src/main/java/com/ai/assistance/operit/services/core/AttachmentDelegate.kt b/app/src/main/java/com/ai/assistance/operit/services/core/AttachmentDelegate.kt index 5ed0c7115f..3ce44d5b37 100644 --- a/app/src/main/java/com/ai/assistance/operit/services/core/AttachmentDelegate.kt +++ b/app/src/main/java/com/ai/assistance/operit/services/core/AttachmentDelegate.kt @@ -5,13 +5,13 @@ import android.content.Context import android.net.Uri import android.provider.OpenableColumns import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.util.logging.AppLogger import com.ai.assistance.operit.services.core.attachments.ImageAttachmentIndex import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import com.ai.assistance.operit.util.files.OperitPaths -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.DirectoryListingData import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.core.tools.FileExistsData diff --git a/app/src/main/java/com/ai/assistance/operit/services/core/MessageCoordinationDelegate.kt b/app/src/main/java/com/ai/assistance/operit/services/core/MessageCoordinationDelegate.kt index 94298ad0a1..c1864cda86 100644 --- a/app/src/main/java/com/ai/assistance/operit/services/core/MessageCoordinationDelegate.kt +++ b/app/src/main/java/com/ai/assistance/operit/services/core/MessageCoordinationDelegate.kt @@ -26,7 +26,7 @@ import com.ai.assistance.operit.data.model.InputProcessingState import com.ai.assistance.operit.data.model.CharacterCardChatModelBindingMode import com.ai.assistance.operit.data.model.CharacterCardMemoryProfileBindingMode import com.ai.assistance.operit.data.model.ActivePrompt -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.ui.features.conversation.chat.viewmodel.UiStateDelegate import com.ai.assistance.operit.data.preferences.CharacterCardManager import com.ai.assistance.operit.data.preferences.CharacterGroupCardManager diff --git a/app/src/main/java/com/ai/assistance/operit/services/core/MessageProcessingDelegate.kt b/app/src/main/java/com/ai/assistance/operit/services/core/MessageProcessingDelegate.kt index a6ef2cafe7..f351fcb35c 100644 --- a/app/src/main/java/com/ai/assistance/operit/services/core/MessageProcessingDelegate.kt +++ b/app/src/main/java/com/ai/assistance/operit/services/core/MessageProcessingDelegate.kt @@ -15,7 +15,7 @@ import com.ai.assistance.operit.api.chat.EnhancedAIService import com.ai.assistance.operit.core.chat.AIMessageManager import com.ai.assistance.operit.core.chat.logMessageTiming import com.ai.assistance.operit.core.chat.messageTimingNow -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.agent.PhoneAgentJobRegistry import com.ai.assistance.operit.data.model.* import com.ai.assistance.operit.data.repository.ChatDraftRepository @@ -52,7 +52,7 @@ import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong import kotlin.coroutines.coroutineContext diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslActions.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslActions.kt index 7bc6c14f4f..b724f5bd96 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslActions.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslActions.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.ui.common.composedsl import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import com.ai.assistance.operit.core.tools.javascript.JsEngine -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import kotlinx.coroutines.yield @Composable diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslDebugSnapshotStore.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslDebugSnapshotStore.kt index 95c4cb74ec..ae00808fb1 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslDebugSnapshotStore.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslDebugSnapshotStore.kt @@ -1,8 +1,8 @@ package com.ai.assistance.operit.ui.common.composedsl import android.content.Context -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import org.json.JSONArray import org.json.JSONObject import org.json.JSONTokener diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslGeneratedRenderers.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslGeneratedRenderers.kt index 68bedcdab6..62ba7a98f8 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslGeneratedRenderers.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslGeneratedRenderers.kt @@ -49,8 +49,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.sp import coil.compose.rememberAsyncImagePainter -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslParser +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslParser /** * AUTO-GENERATED from Compose Material3/Foundation component bindings. diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslScreen.kt index 7560157851..ecb50c52f2 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslScreen.kt @@ -162,14 +162,14 @@ import androidx.webkit.ScriptHandler import androidx.webkit.WebViewCompat import androidx.webkit.WebViewFeature import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.javascript.JsEngine import com.ai.assistance.operit.core.tools.javascript.JsJavaBridgeDelegates import com.ai.assistance.operit.core.tools.javascript.extractJsExecutionErrorMessage -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslParser -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslParser +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import com.ai.assistance.operit.plugins.chatmessage.ChatMessageMenuDialogRequest import com.ai.assistance.operit.ui.common.displays.MarkdownTextComposable import com.ai.assistance.operit.ui.common.markdown.DefaultXmlRenderer diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebView.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebView.kt index fdf4cfe1ae..e70041b5b2 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebView.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/composedsl/ToolPkgComposeDslWebView.kt @@ -44,8 +44,8 @@ import androidx.webkit.WebViewFeature import com.ai.assistance.operit.core.tools.javascript.JsEngine import com.ai.assistance.operit.core.tools.javascript.JsJavaBridgeDelegates import com.ai.assistance.operit.core.tools.javascript.extractJsExecutionErrorMessage -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslParser +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslParser import com.ai.assistance.operit.ui.features.models.token.webview.WebViewConfig import com.ai.assistance.operit.util.logging.AppLogger import org.json.JSONObject diff --git a/app/src/main/java/com/ai/assistance/operit/ui/common/markdown/XmlRenderPluginRegistry.kt b/app/src/main/java/com/ai/assistance/operit/ui/common/markdown/XmlRenderPluginRegistry.kt index 1fad1b4a23..736b48d401 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/common/markdown/XmlRenderPluginRegistry.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/common/markdown/XmlRenderPluginRegistry.kt @@ -24,10 +24,10 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.LinearProgressIndicator -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslParser -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslParser +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import com.ai.assistance.operit.ui.common.composedsl.LocalComposeDslXmlStream import com.ai.assistance.operit.ui.common.composedsl.RenderToolPkgComposeDslNode import com.ai.assistance.operit.ui.common.composedsl.RetainToolPkgComposeDslActions diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBookmarkSheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBookmarkSheet.kt index 1c552771b6..977cb79026 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBookmarkSheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBookmarkSheet.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBookmark +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBookmark @Composable internal fun WebSessionBookmarkSheet( diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBrowserScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBrowserScreen.kt index 3ddead823a..4ed03a1ab1 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBrowserScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionBrowserScreen.kt @@ -41,13 +41,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBookmark -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBrowserHostState -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBrowserSheetRoute -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionHistoryEntry -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionPendingDialogState -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionWebViewHost -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui.WebSessionUserscriptUiState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBookmark +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBrowserHostState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBrowserSheetRoute +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionHistoryEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionPendingDialogState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionWebViewHost +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui.WebSessionUserscriptUiState import java.util.Locale @Composable @@ -488,7 +488,7 @@ private fun PendingDialogOverlay( @Composable private fun WebSessionOverlaySheetContent( sheetRoute: WebSessionBrowserSheetRoute, - browserState: com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBrowserState, + browserState: com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBrowserState, bookmarks: List, globalHistory: List, userscriptUiState: WebSessionUserscriptUiState, diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionDownloadSheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionDownloadSheet.kt index 5098511c36..89085d4b19 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionDownloadSheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionDownloadSheet.kt @@ -25,10 +25,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.BrowserDownloadFilter -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.BrowserDownloadItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.BrowserDownloadUiState -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.formatBytes +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserDownloadFilter +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserDownloadItem +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.BrowserDownloadUiState +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.formatBytes @OptIn(ExperimentalLayoutApi::class) @Composable diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionHistorySheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionHistorySheet.kt index 7e4e42a08d..748db0b0a7 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionHistorySheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionHistorySheet.kt @@ -23,8 +23,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionHistoryEntry -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionSessionHistoryItem +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionHistoryEntry +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionSessionHistoryItem import java.text.DateFormat import java.util.Date diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMenuSheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMenuSheet.kt index 6e9bb1b515..0a3222027d 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMenuSheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMenuSheet.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageMenuCommand +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageMenuCommand @Composable internal fun WebSessionMenuSheet( diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMinimizedIndicator.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMinimizedIndicator.kt index b2791fd557..c4ad9e6889 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMinimizedIndicator.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionMinimizedIndicator.kt @@ -57,7 +57,7 @@ internal fun WebSessionMinimizedIndicator( contentDescription: String, activeDownloadCount: Int, hasFailedDownloads: Boolean, - externalOpenPrompt: com.ai.assistance.operit.core.tools.defaultTool.websession.browser.ExternalOpenPromptState?, + externalOpenPrompt: com.ai.assistance.operit.core.tools.builtin.web.session.browser.ExternalOpenPromptState?, onToggleFullscreen: () -> Unit, onDragBy: (dx: Int, dy: Int) -> Unit, onConfirmExternalOpen: (String) -> Unit, diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionTabSheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionTabSheet.kt index 8eec55e878..9e38d25eca 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionTabSheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionTabSheet.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.browser.WebSessionBrowserTab +import com.ai.assistance.operit.core.tools.builtin.web.session.browser.WebSessionBrowserTab @Composable internal fun WebSessionTabSheet( diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionUserscriptSheet.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionUserscriptSheet.kt index 7bc05b6f5b..4728e35e31 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionUserscriptSheet.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/websession/browser/WebSessionUserscriptSheet.kt @@ -40,12 +40,12 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptInstallPreview -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptListItem -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageMenuCommand -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageRuntimeState -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.UserscriptPageRuntimeStatus -import com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui.WebSessionUserscriptUiState +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptInstallPreview +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptListItem +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageMenuCommand +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageRuntimeState +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.UserscriptPageRuntimeStatus +import com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui.WebSessionUserscriptUiState @Composable internal fun WebSessionUserscriptSheet( diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowDetailScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowDetailScreen.kt index 9995d1fa7e..cc0449ba64 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowDetailScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowDetailScreen.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R import com.ai.assistance.operit.core.config.SystemToolPrompts -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.Workflow import com.ai.assistance.operit.data.model.WorkflowNode import com.ai.assistance.operit.data.model.TriggerNode diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowListScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowListScreen.kt index 2ead13578e..ec237d88a4 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowListScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/screens/WorkflowListScreen.kt @@ -81,7 +81,7 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.ExecutionStatus import com.ai.assistance.operit.data.model.Workflow import com.ai.assistance.operit.ui.components.CustomScaffold diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/viewmodel/WorkflowViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/viewmodel/WorkflowViewModel.kt index 7a1626dfcd..9ea7c384c5 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/viewmodel/WorkflowViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/automation/workflow/viewmodel/WorkflowViewModel.kt @@ -8,8 +8,8 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.workflow.NodeExecutionState import com.ai.assistance.operit.data.model.ConditionNode import com.ai.assistance.operit.data.model.ConditionOperator diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/AttachmentSelector.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/AttachmentSelector.kt index 720d26bbf1..febf065b99 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/AttachmentSelector.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/AttachmentSelector.kt @@ -79,8 +79,8 @@ import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupProperties import com.ai.assistance.operit.R import com.ai.assistance.operit.ui.features.conversation.chat.attachments.images.ChatImagePickerDialog -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager as ToolPackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager as ToolPackageManager import com.ai.assistance.operit.data.skill.SkillRepository import kotlinx.coroutines.launch import java.io.File diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/SharedFileTargetDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/SharedFileTargetDialog.kt index e60fff9eb1..72e5fe9c5e 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/SharedFileTargetDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/SharedFileTargetDialog.kt @@ -35,9 +35,9 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageFileImportSupport -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.install.PackageFileImportSupport +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.ChatHistory import java.time.format.DateTimeFormatter import java.time.format.FormatStyle diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/agent/AgentChatInputSection.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/agent/AgentChatInputSection.kt index 4a89bbcdae..ee6c4943e9 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/agent/AgentChatInputSection.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/agent/AgentChatInputSection.kt @@ -115,7 +115,7 @@ import com.ai.assistance.operit.api.chat.EnhancedAIService import com.ai.assistance.operit.api.chat.model.ThinkingQualityMapping import com.ai.assistance.operit.api.chat.model.ThinkingQualityMappingRegistry import com.ai.assistance.operit.core.memory.extraction.MemoryAutoSaveScheduler -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.data.model.AttachmentInfo import com.ai.assistance.operit.data.model.ChatMessage import com.ai.assistance.operit.data.model.CharacterCardChatModelBindingMode diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/classic/ClassicChatInputSection.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/classic/ClassicChatInputSection.kt index 8dadbeedd7..a0120ffc1c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/classic/ClassicChatInputSection.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/components/style/input/classic/ClassicChatInputSection.kt @@ -64,7 +64,7 @@ import androidx.compose.ui.tooling.preview.Preview import com.ai.assistance.operit.data.model.AttachmentInfo import com.ai.assistance.operit.data.model.InputProcessingState import com.ai.assistance.operit.data.model.ChatMessage -import com.ai.assistance.operit.core.tools.ToolProgressBus +import com.ai.assistance.operit.core.tools.runtime.ToolProgressBus import com.ai.assistance.operit.ui.common.animations.SimpleAnimatedVisibility import com.ai.assistance.operit.ui.features.conversation.chat.components.AttachmentChip import com.ai.assistance.operit.ui.features.conversation.chat.components.AttachmentSelectorPanel diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/export/htmlpackager/HtmlPackagerScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/export/htmlpackager/HtmlPackagerScreen.kt index fae329ef8a..ae04aad9bf 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/export/htmlpackager/HtmlPackagerScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/export/htmlpackager/HtmlPackagerScreen.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.documentfile.provider.DocumentFile -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.ui.components.CustomScaffold diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/screens/AIChatScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/screens/AIChatScreen.kt index 9401c1322f..db167cb41b 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/screens/AIChatScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/screens/AIChatScreen.kt @@ -44,7 +44,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ApiProviderType import com.ai.assistance.operit.data.model.CharacterCardChatModelBindingMode diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/viewmodel/ChatViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/viewmodel/ChatViewModel.kt index 59dcc4a5f9..9d9eeb990c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/viewmodel/ChatViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/viewmodel/ChatViewModel.kt @@ -30,7 +30,7 @@ import com.ai.assistance.operit.core.chat.runtime.ChatRuntimeSlot import com.ai.assistance.operit.api.chat.EnhancedAIService import com.ai.assistance.operit.core.chat.AIMessageManager import com.ai.assistance.operit.core.chat.context.ContextWindowBreakdown -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.FileOperationData import com.ai.assistance.operit.data.model.ApiProviderType import com.ai.assistance.operit.data.model.AttachmentInfo @@ -95,7 +95,7 @@ import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace. import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.WorkspacePreviewRefreshBus import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.WorkspacePreviewRefreshEvent import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.toWorkspaceCommandOutputEntries -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import com.ai.assistance.operit.core.speech.text.TtsCleaner import com.ai.assistance.operit.core.speech.text.TtsSegmenter import com.ai.assistance.operit.ui.features.conversation.chat.util.findMentionTokens diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/LocalWebServer.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/LocalWebServer.kt index fbc4526202..96f9ea2286 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/LocalWebServer.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/LocalWebServer.kt @@ -7,7 +7,7 @@ import android.system.Os import android.system.OsConstants import android.util.Base64 import android.webkit.CookieManager -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.BinaryFileContentData import com.ai.assistance.operit.core.tools.DirectoryListingData import com.ai.assistance.operit.data.model.AITool diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/WorkspaceFileSelector.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/WorkspaceFileSelector.kt index b1d4325073..c9f63a4c45 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/WorkspaceFileSelector.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/WorkspaceFileSelector.kt @@ -41,8 +41,8 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager as ToolPackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager as ToolPackageManager import com.ai.assistance.operit.data.skill.SkillRepository import com.ai.assistance.operit.ui.features.conversation.chat.viewmodel.ChatViewModel import com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.process.GitIgnoreFilter diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/FileManager.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/FileManager.kt index 3181112a10..cc473cc4f8 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/FileManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/FileManager.kt @@ -43,7 +43,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.res.stringResource import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.DirectoryListingData import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.core.tools.FileExistsData diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceBackupManager.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceBackupManager.kt index 572512822d..c1535678f8 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceBackupManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceBackupManager.kt @@ -8,8 +8,8 @@ import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.core.tools.FileExistsData import com.ai.assistance.operit.core.tools.FileInfoData import com.ai.assistance.operit.core.tools.FindFilesResultData -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.AIToolHook +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHook import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.util.logging.AppLogger import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceManager.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceManager.kt index 8b062c89eb..0693188880 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceManager.kt @@ -51,7 +51,7 @@ import androidx.compose.ui.zIndex import com.ai.assistance.operit.R import com.ai.assistance.operit.ui.features.conversation.chat.workspace.WorkspaceEntryAction import com.ai.assistance.operit.ui.features.conversation.chat.workspace.WorkspaceEntryRequest -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ChatHistory diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceReadOnlyDocumentPreview.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceReadOnlyDocumentPreview.kt index e1cf314baa..92d477019f 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceReadOnlyDocumentPreview.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceReadOnlyDocumentPreview.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.BinaryFileContentData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceSetup.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceSetup.kt index cff79dd443..f67fe030da 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceSetup.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/WorkspaceSetup.kt @@ -18,8 +18,8 @@ import com.ai.assistance.operit.ui.features.conversation.chat.webview.createAndG import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.ui.features.conversation.chat.webview.createAndResetWorkspaceDirectory import kotlinx.coroutines.* diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/browser/WorkspaceBrowserOperations.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/browser/WorkspaceBrowserOperations.kt index 40de9edb8d..54638573c6 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/browser/WorkspaceBrowserOperations.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/browser/WorkspaceBrowserOperations.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.util.Base64 import androidx.core.content.FileProvider import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.BinaryFileContentData import com.ai.assistance.operit.core.tools.FileExistsData import com.ai.assistance.operit.data.model.AITool diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/links/WorkspaceFileLinkHost.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/links/WorkspaceFileLinkHost.kt index 29976bfb2b..4fe30721e9 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/links/WorkspaceFileLinkHost.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/links/WorkspaceFileLinkHost.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.core.tools.FileExistsData import com.ai.assistance.operit.data.model.AITool diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/process/WorkspaceRuleFileReader.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/process/WorkspaceRuleFileReader.kt index 65cbfcf5ea..5db4f1f3dc 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/process/WorkspaceRuleFileReader.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/chat/webview/workspace/process/WorkspaceRuleFileReader.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.ui.features.conversation.chat.webview.workspace.process import android.content.Context -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.FileContentData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/viewmodel/MemoryViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/viewmodel/MemoryViewModel.kt index 5c85fe149e..51b9145537 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/viewmodel/MemoryViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/viewmodel/MemoryViewModel.kt @@ -17,7 +17,7 @@ import com.ai.assistance.operit.data.repository.MemoryRepository import com.ai.assistance.operit.ui.features.conversation.memory.screens.graph.model.Edge import com.ai.assistance.operit.ui.features.conversation.memory.screens.graph.model.Graph import com.ai.assistance.operit.ui.features.conversation.memory.screens.graph.model.Node -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.R diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/workbench/MemoryDocumentImporter.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/workbench/MemoryDocumentImporter.kt index 1c03b76172..3bc00f6a52 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/workbench/MemoryDocumentImporter.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/conversation/memory/workbench/MemoryDocumentImporter.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.ui.features.conversation.memory.workbench import android.content.Context import android.net.Uri import android.provider.OpenableColumns -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/MCPPackageDetailsDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/MCPPackageDetailsDialog.kt index 31d01f46e7..c1b276068c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/MCPPackageDetailsDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/MCPPackageDetailsDialog.kt @@ -57,7 +57,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.LocalizedText import com.ai.assistance.operit.core.tools.PackageTool import com.ai.assistance.operit.core.tools.PackageToolParameter diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageAddActionDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageAddActionDialog.kt index b29d5a5ebe..ce83cf0600 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageAddActionDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageAddActionDialog.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateKind +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateKind /** * 包管理加号弹出的中心选择面板。 diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageDetailsDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageDetailsDialog.kt index 10ac316e75..ec768b2429 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageDetailsDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageDetailsDialog.kt @@ -34,8 +34,8 @@ import com.ai.assistance.operit.ui.features.extensions.packages.components.dialo import com.ai.assistance.operit.ui.features.extensions.packages.components.dialogs.packageui.PackageEnvironmentSection import com.ai.assistance.operit.ui.features.extensions.packages.components.dialogs.packageui.PackageToolCard import com.ai.assistance.operit.core.tools.ToolPackage -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.ToolPkgRuntimeMonitor +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.ToolPkgRuntimeMonitor import com.ai.assistance.operit.ui.common.icons.rememberLogoPainter import java.text.SimpleDateFormat import java.util.Date diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageTemplateIdentityDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageTemplateIdentityDialog.kt index d4a7371f74..43f2d9d556 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageTemplateIdentityDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/PackageTemplateIdentityDialog.kt @@ -18,8 +18,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateFactory -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateKind +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateFactory +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateKind /** 新建模板前填写显示名和包标识,避免落盘出未命名垃圾包。 */ @Composable diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/ScriptExecutionDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/ScriptExecutionDialog.kt index 2aa74c0b5d..39a41d3c6d 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/ScriptExecutionDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/dialogs/ScriptExecutionDialog.kt @@ -25,7 +25,7 @@ import com.ai.assistance.operit.core.tools.PackageTool import com.ai.assistance.operit.core.tools.ScriptExecutionTraceData import com.ai.assistance.operit.core.tools.StringResultData import com.ai.assistance.operit.core.tools.javascript.JsToolManager -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/ArtifactLocalInstallSupport.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/ArtifactLocalInstallSupport.kt index eccad63694..c7da97b112 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/ArtifactLocalInstallSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/ArtifactLocalInstallSupport.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.ui.features.extensions.packages.market import android.content.Context -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.api.ArtifactProjectVersionResponse import com.ai.assistance.operit.data.api.MarketV2Entry import com.ai.assistance.operit.data.transfer.copyWithTransferProgress diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/GitHubForgePublishService.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/GitHubForgePublishService.kt index 2ae8808fef..901231ae5e 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/GitHubForgePublishService.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/GitHubForgePublishService.kt @@ -12,7 +12,7 @@ import com.ai.assistance.operit.data.api.MarketV2PublishRequest import com.ai.assistance.operit.data.api.MarketV2PublishVersion import com.ai.assistance.operit.data.api.MarketV2Version import com.ai.assistance.operit.data.preferences.GitHubAuthPreferences -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin import com.ai.assistance.operit.core.tools.packTool.minify.ToolPkgArtifactMinifier import java.io.File import java.net.URI diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketEntryInstallController.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketEntryInstallController.kt index 0079a31ee4..e81a28eabe 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketEntryInstallController.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketEntryInstallController.kt @@ -4,8 +4,8 @@ import com.ai.assistance.operit.ui.common.oktoast.OKToast import android.content.Context import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.api.MarketStatsApiService import com.ai.assistance.operit.data.api.MarketV2Entry import com.ai.assistance.operit.data.mcp.InstallResult diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketInstallMarker.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketInstallMarker.kt index dea710080e..6923c50a5c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketInstallMarker.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/market/MarketInstallMarker.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.ui.features.extensions.packages.market import android.content.Context -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.api.MarketV2Entry import com.ai.assistance.operit.data.mcp.MCPLocalServer import com.ai.assistance.operit.data.skill.SkillRepository diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerDialogs.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerDialogs.kt index 97a65f4662..f62cb2a505 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerDialogs.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerDialogs.kt @@ -54,7 +54,7 @@ import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R import com.ai.assistance.operit.core.tools.EnvVar import com.ai.assistance.operit.core.tools.ToolPackage -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager @Composable fun PackageLoadErrorsDialog( diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerScreen.kt index 89a7e5d7cc..23aa2c3742 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageManagerScreen.kt @@ -52,15 +52,15 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.PackageTool import com.ai.assistance.operit.core.tools.ToolPackage import com.ai.assistance.operit.core.tools.EnvVar -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateCreateError -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateFactory -import com.ai.assistance.operit.core.tools.packTool.PackageTemplateKind -import com.ai.assistance.operit.core.tools.packTool.ToolPkgMarketOrigin +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateCreateError +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateFactory +import com.ai.assistance.operit.core.tools.packTool.install.PackageTemplateKind +import com.ai.assistance.operit.core.tools.packTool.metadata.ToolPkgMarketOrigin import com.ai.assistance.operit.data.mcp.MCPRepository import com.ai.assistance.operit.data.preferences.EnvPreferences import com.ai.assistance.operit.data.preferences.ApiPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageSearch.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageSearch.kt index 66c8086c17..ca77b21fc6 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageSearch.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PackageSearch.kt @@ -3,7 +3,7 @@ package com.ai.assistance.operit.ui.features.extensions.packages.screens import android.content.Context import com.ai.assistance.operit.core.tools.PackageTool import com.ai.assistance.operit.core.tools.ToolPackage -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager fun packageMatchesSearch( context: Context, diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PluginTabContent.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PluginTabContent.kt index 79252ddec4..0c580ec93c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PluginTabContent.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/PluginTabContent.kt @@ -49,7 +49,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.packTool.metadata.PluginActivity import com.ai.assistance.operit.ui.common.icons.rememberLogoPainter import com.ai.assistance.operit.ui.features.extensions.packages.components.EmptyState diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/QuickPluginCreatorSetupSupport.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/QuickPluginCreatorSetupSupport.kt index c0f2f5b0c0..08ad25bb0d 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/QuickPluginCreatorSetupSupport.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/QuickPluginCreatorSetupSupport.kt @@ -3,9 +3,9 @@ package com.ai.assistance.operit.ui.features.extensions.packages.screens import android.content.Context import android.os.Environment import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.ToolParameter import com.ai.assistance.operit.data.model.ToolResult diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/artifact/viewmodel/ArtifactMarketViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/artifact/viewmodel/ArtifactMarketViewModel.kt index aefd5a2b4f..67bc40a82e 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/artifact/viewmodel/ArtifactMarketViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/artifact/viewmodel/ArtifactMarketViewModel.kt @@ -8,8 +8,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.api.MarketStatsApiService import com.ai.assistance.operit.data.api.GitHubApiService import com.ai.assistance.operit.data.api.MarketV2EntryUpdateRequest diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketBrowseViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketBrowseViewModel.kt index 059d222c9e..1dfe096866 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketBrowseViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketBrowseViewModel.kt @@ -8,8 +8,8 @@ import com.ai.assistance.operit.data.api.MarketStatsApiService import com.ai.assistance.operit.data.api.MarketV2Entry import com.ai.assistance.operit.data.api.MarketV2ManifestCategory import com.ai.assistance.operit.data.api.MarketV2Notification -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.ui.features.extensions.packages.market.MarketEntryInstallController import com.ai.assistance.operit.ui.features.extensions.packages.market.MarketInstallProgress import com.ai.assistance.operit.ui.features.extensions.packages.market.MarketInstallStateStore diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketDetailViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketDetailViewModel.kt index 5e36f2b56d..8ec860b4d8 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketDetailViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/extensions/packages/screens/market/viewmodel/UnifiedMarketDetailViewModel.kt @@ -4,8 +4,8 @@ import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.R import com.ai.assistance.operit.data.api.GitHubApiService import com.ai.assistance.operit.data.api.MarketStatsApiService diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/resources/hub/ResourceHubViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/resources/hub/ResourceHubViewModel.kt index 952d0985f3..ab4142aa6f 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/resources/hub/ResourceHubViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/resources/hub/ResourceHubViewModel.kt @@ -2,7 +2,7 @@ package com.ai.assistance.operit.ui.features.management.resources.hub import android.app.Application import android.os.SystemClock -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import android.net.Uri import android.provider.DocumentsContract import android.provider.OpenableColumns diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/components/CharacterCardDialog.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/components/CharacterCardDialog.kt index a95d3ac899..383c9ad24f 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/components/CharacterCardDialog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/components/CharacterCardDialog.kt @@ -48,8 +48,8 @@ import com.ai.assistance.operit.data.model.getModelByIndex import com.ai.assistance.operit.data.model.getModelList import com.ai.assistance.operit.data.model.getValidModelIndex import com.ai.assistance.operit.core.config.SystemToolPrompts -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.preferences.ModelConfigManager import com.ai.assistance.operit.data.preferences.WaifuPreferences import com.ai.assistance.operit.data.preferences.WaifuSettings diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/display/DisplayBehaviorState.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/display/DisplayBehaviorState.kt index cb90f266f2..bfadbdf37b 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/display/DisplayBehaviorState.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/display/DisplayBehaviorState.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import com.ai.assistance.operit.api.chat.AIForegroundService -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.ApiPreferences import com.ai.assistance.operit.data.preferences.DisplayPreferencesManager import com.ai.assistance.operit.data.preferences.OrientationReloadPolicy diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/toolpermissions/ToolPermissionPage.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/toolpermissions/ToolPermissionPage.kt index 091326876e..eaf21a2fb7 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/toolpermissions/ToolPermissionPage.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/settings/toolpermissions/ToolPermissionPage.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.ui.common.oktoast.OKToast import com.ai.assistance.operit.ui.main.LocalTopBarTitleContent import com.ai.assistance.operit.ui.main.TopBarTitleContent diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageScreen.kt index cc06a87562..65444907f5 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageScreen.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.storage.ExtensionCategory import com.ai.assistance.operit.data.storage.ExtensionItem import com.ai.assistance.operit.data.storage.formatStorageSize diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageViewModel.kt index b97de966d3..8ce39846ad 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/ConfigurationResourceStorageViewModel.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.storage.ConfigurationResourceEntry import com.ai.assistance.operit.data.storage.ConfigurationResourceInventory import com.ai.assistance.operit.data.storage.ConfigurationResourceSnapshot diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/DataStorageScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/DataStorageScreen.kt index 74d880d1f6..a278d73951 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/DataStorageScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/management/storage/DataStorageScreen.kt @@ -75,7 +75,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.defaultTool.standard.CookiePrivacyManager +import com.ai.assistance.operit.core.tools.builtin.web.CookiePrivacyManager import com.ai.assistance.operit.data.storage.CleanupTarget import com.ai.assistance.operit.data.storage.CleanupTargetUsage import com.ai.assistance.operit.data.storage.DataStorageSnapshot diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/components/PermissionLevelCard.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/components/PermissionLevelCard.kt index da4113acce..e8ebaecfad 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/components/PermissionLevelCard.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/components/PermissionLevelCard.kt @@ -49,7 +49,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.ai.assistance.operit.R import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilities -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.androidPermissionPreferences import com.ai.assistance.operit.ui.features.support.demo.permissions.SystemPermission import com.ai.assistance.operit.ui.features.support.demo.permissions.SystemPermissionStatus @@ -861,7 +861,7 @@ private fun ShizukuPermissionSection( // 检查Shizuku是否需要更新 val isShizukuUpdateNeeded = remember(isShizukuInstalled, isShizukuRunning, hasShizukuPermission) { try { - com.ai.assistance.operit.core.tools.system.ShizukuInstaller.isShizukuUpdateNeeded( + com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuInstaller.isShizukuUpdateNeeded( context ) } catch (e: Exception) { diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/screens/ShizukuDemoScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/screens/ShizukuDemoScreen.kt index 0a41f47c99..4265b9adaf 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/screens/ShizukuDemoScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/screens/ShizukuDemoScreen.kt @@ -26,12 +26,12 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import com.ai.assistance.operit.R -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.ui.main.screens.Screen import com.ai.assistance.operit.ui.main.screens.ScreenNavigationHandler -import com.ai.assistance.operit.core.tools.system.AccessibilityProviderInstaller -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer -import com.ai.assistance.operit.core.tools.system.ShizukuInstaller +import com.ai.assistance.operit.core.tools.permissions.authorization.AccessibilityProviderInstaller +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuInstaller import com.ai.assistance.operit.data.repository.UIHierarchyManager import com.ai.assistance.operit.ui.features.support.demo.components.* import com.ai.assistance.operit.ui.features.support.demo.permissions.SystemPermissionSettings diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/state/DemoStateManager.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/state/DemoStateManager.kt index 2074cc8ceb..6b301ad23f 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/state/DemoStateManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/state/DemoStateManager.kt @@ -9,8 +9,8 @@ import android.provider.Settings import com.ai.assistance.operit.util.logging.AppLogger import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import com.ai.assistance.operit.core.tools.system.OperitTerminalManager -import com.ai.assistance.operit.core.tools.system.RootAuthorizer +import com.ai.assistance.operit.core.tools.system.terminal.OperitTerminalManager +import com.ai.assistance.operit.core.tools.permissions.authorization.RootAuthorizer import com.ai.assistance.operit.data.repository.UIHierarchyManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay @@ -23,9 +23,9 @@ import android.content.pm.PackageManager import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.system.AccessibilityProviderInstaller -import com.ai.assistance.operit.core.tools.system.ShizukuAuthorizer -import com.ai.assistance.operit.core.tools.system.Terminal +import com.ai.assistance.operit.core.tools.permissions.authorization.AccessibilityProviderInstaller +import com.ai.assistance.operit.core.tools.permissions.authorization.ShizukuAuthorizer +import com.ai.assistance.operit.core.tools.system.terminal.Terminal import com.ai.assistance.operit.data.mcp.plugins.MCPSharedSession import com.ai.assistance.operit.R import com.ai.assistance.operit.ui.features.support.demo.permissions.SystemPermissionSettings diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/viewmodel/ShizukuDemoViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/viewmodel/ShizukuDemoViewModel.kt index de503bed4e..b62ecd3419 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/viewmodel/ShizukuDemoViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/support/demo/viewmodel/ShizukuDemoViewModel.kt @@ -9,8 +9,8 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.system.RootAuthorizer +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.permissions.authorization.RootAuthorizer import com.ai.assistance.operit.R import com.ai.assistance.operit.ui.features.support.demo.state.DemoStateManager import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/ai/assistance/operit/ui/features/support/diagnostics/uidebugger/UIDebuggerViewModel.kt b/app/src/main/java/com/ai/assistance/operit/ui/features/support/diagnostics/uidebugger/UIDebuggerViewModel.kt index 99409f3cd2..1c3ec92b02 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/features/support/diagnostics/uidebugger/UIDebuggerViewModel.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/features/support/diagnostics/uidebugger/UIDebuggerViewModel.kt @@ -4,7 +4,7 @@ import android.content.Context import android.graphics.Rect import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.core.tools.UIPageResultData import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.core.tools.system.action.ActionListener diff --git a/app/src/main/java/com/ai/assistance/operit/ui/floating/ui/screenocr/screen/FloatingScreenOcrScreen.kt b/app/src/main/java/com/ai/assistance/operit/ui/floating/ui/screenocr/screen/FloatingScreenOcrScreen.kt index d00842d996..51a6c7fbf3 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/floating/ui/screenocr/screen/FloatingScreenOcrScreen.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/floating/ui/screenocr/screen/FloatingScreenOcrScreen.kt @@ -69,7 +69,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.model.AITool import com.ai.assistance.operit.data.model.AttachmentInfo import com.ai.assistance.operit.ui.floating.FloatContext diff --git a/app/src/main/java/com/ai/assistance/operit/ui/main/MainActivity.kt b/app/src/main/java/com/ai/assistance/operit/ui/main/MainActivity.kt index 089e6b6a9d..999f5a4920 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/main/MainActivity.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/main/MainActivity.kt @@ -34,7 +34,7 @@ import androidx.lifecycle.lifecycleScope import com.ai.assistance.operit.R import com.ai.assistance.operit.api.chat.AIForegroundService import com.ai.assistance.operit.core.application.OperitApplication -import com.ai.assistance.operit.core.tools.AIToolHandler +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler import com.ai.assistance.operit.data.preferences.AgreementPreferences import com.ai.assistance.operit.data.preferences.DisplayPreferencesManager import com.ai.assistance.operit.data.preferences.OrientationReloadPolicy diff --git a/app/src/main/java/com/ai/assistance/operit/ui/main/OperitApp.kt b/app/src/main/java/com/ai/assistance/operit/ui/main/OperitApp.kt index 802f09088e..61543ce3d5 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/main/OperitApp.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/main/OperitApp.kt @@ -24,8 +24,8 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.res.stringResource import androidx.navigation.compose.rememberNavController -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.data.mcp.MCPRepository import com.ai.assistance.operit.data.security.PluginDenylistRepository import com.ai.assistance.operit.data.preferences.ApiPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/ui/main/components/DrawerContent.kt b/app/src/main/java/com/ai/assistance/operit/ui/main/components/DrawerContent.kt index f356f98e62..15971e530d 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/main/components/DrawerContent.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/main/components/DrawerContent.kt @@ -66,10 +66,10 @@ import com.ai.assistance.operit.ui.features.conversation.chat.sidebar.LocalRunMa import com.ai.assistance.operit.ui.features.conversation.chat.sidebar.LocalMainChatViewModel import com.ai.assistance.operit.ui.features.conversation.chat.sidebar.LocalMainChatSidebarState import com.ai.assistance.operit.ui.theme.LocalThemePreferenceSnapshot -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager import com.ai.assistance.operit.core.tools.permissions.PermissionCapabilityResolver -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import com.ai.assistance.operit.data.preferences.UserPreferencesManager import com.ai.assistance.operit.data.preferences.androidPermissionPreferences diff --git a/app/src/main/java/com/ai/assistance/operit/ui/main/navigation/AppRouteCatalog.kt b/app/src/main/java/com/ai/assistance/operit/ui/main/navigation/AppRouteCatalog.kt index 85af5b1b3d..829198027c 100644 --- a/app/src/main/java/com/ai/assistance/operit/ui/main/navigation/AppRouteCatalog.kt +++ b/app/src/main/java/com/ai/assistance/operit/ui/main/navigation/AppRouteCatalog.kt @@ -3,9 +3,9 @@ package com.ai.assistance.operit.ui.main.navigation import android.content.Context import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Extension -import com.ai.assistance.operit.core.tools.AIToolHandler -import com.ai.assistance.operit.core.tools.packTool.PackageManager -import com.ai.assistance.operit.core.tools.packTool.TOOLPKG_NAV_SURFACE_MAIN_SIDEBAR_PLUGINS +import com.ai.assistance.operit.core.tools.runtime.AIToolHandler +import com.ai.assistance.operit.core.tools.packTool.runtime.PackageManager +import com.ai.assistance.operit.core.tools.packTool.metadata.TOOLPKG_NAV_SURFACE_MAIN_SIDEBAR_PLUGINS import com.ai.assistance.operit.ui.common.icons.MaterialIconNameResolver import com.ai.assistance.operit.ui.main.screens.Screen import com.ai.assistance.operit.ui.main.screens.ScreenRouteRegistry diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 9d7c8b5975..e3592c378f 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -7115,8 +7115,8 @@ Cannot decode Bitmap from URI Cannot open input stream for URI - - Debugger UI operation listener started + + Shizuku UI listener started Default Config diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 9f8241bb8b..b0c5c07d89 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -6191,7 +6191,7 @@ No se puede leer el archivo de imagen: %1$s No se puede decodificar Bitmap desde la URI No se puede abrir el flujo de entrada de la URI - Monitor de operaciones de UI del depurador iniciado + Monitor de operaciones de UI de Shizuku iniciado Configuración predeterminada Configuración %1$s Error al importar: %1$s diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index a4e3fec218..97bf331701 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -6049,7 +6049,7 @@ Tidak dapat mendekode Bitmap dari URI Tidak dapat membuka aliran input URI - Pemantauan aksi UI debugger telah dimulai + Pemantauan aksi UI Shizuku telah dimulai Konfigurasi default Konfigurasi %1$s Gagal mengimpor: %1$s diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index cf0436df8b..440069b6dd 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -7805,7 +7805,7 @@ プロフィール AI アシスタントのフローティングウィンドウ AI アシスタントはバックグラウンドで動作しています - デバッガーによる UI 操作の監視を開始しました + Shizuku による UI 操作の監視を開始しました 設定 %1$s 名前のないタグ ワークスペースをバックアップしています... diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d148076161..23d3678c09 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -6294,7 +6294,7 @@ 이미지 파일을 읽을 수 없습니다: %1$s URI에서 비트맵을 디코딩할 수 없습니다. URI에 대한 입력 스트림을 열 수 없습니다. - 디버거 UI 작업 리스너가 시작되었습니다. + Shizuku UI 작업 리스너가 시작되었습니다. 기본 구성 %1$s 구성 가져오기 실패: %1$s diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 2375a67cad..4630e488a8 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -6111,7 +6111,7 @@ Tidak dapat membaca fail imej: %1$s Tidak dapat menyahkod Bitmap dari URI Tidak dapat membuka aliran input URI - Pendengar tindakan UI penyahpepijat telah dimulakan + Pendengar tindakan UI Shizuku telah dimulakan Konfigurasi lalai Konfigurasi %1$s Import gagal: %1$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1fac5d599c..0596632631 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -5772,7 +5772,7 @@ Não foi possível ler o arquivo de imagem: %1$s Não é possível decodificar o bitmap do URI Não foi possível abrir o fluxo de entrada para URI - O monitoramento da operação da IU do depurador foi iniciado + O monitoramento da operação da IU do Shizuku foi iniciado Configuração padrão Configurar %1$s Falha na importação: %1$s diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 3f6e86c131..8e95edc428 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -7300,8 +7300,8 @@ Nu se poate de laURIDecodareBitmap Nu se poate deschideURIfluxul de intrare - - DebuggerUIMonitorizarea operațiunilor a fost activată + + Ascultătorul UI Shizuku a pornit Configurația implicită diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1f25a4090e..01532b9422 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7720,8 +7720,8 @@ 无法从URI解码Bitmap 无法打开URI的输入流 - - 调试器UI操作监听已启动 + + Shizuku UI 监听器已启动 默认配置 diff --git a/app/src/test/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManagerResultLimitTest.kt b/app/src/test/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManagerResultLimitTest.kt index 9558c23365..2040f4392b 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManagerResultLimitTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/chat/protocol/ConversationMarkupManagerResultLimitTest.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.chat.protocol import com.ai.assistance.operit.core.tools.StringResultData -import com.ai.assistance.operit.core.tools.ToolExecutionLimits +import com.ai.assistance.operit.core.tools.runtime.ToolExecutionLimits import com.ai.assistance.operit.data.model.ToolResult import com.ai.assistance.operit.core.chat.protocol.ChatMarkupRegex import org.junit.Assert.assertEquals diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolsTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolsTest.kt similarity index 99% rename from app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolsTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolsTest.kt index c6760ccdd6..d15a488c0e 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolsTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolsTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.a2ui +package com.ai.assistance.operit.core.tools.builtin.a2ui import com.ai.assistance.operit.core.chat.tools.ToolExecutionManager.ToolRuntimeContext import com.ai.assistance.operit.core.tools.StringResultData diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupportTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupportTest.kt similarity index 95% rename from app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupportTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupportTest.kt index e778d4597b..c97f772b36 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupportTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupportTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.settings import com.ai.assistance.operit.ui.permissions.PermissionLevel import org.junit.Assert.assertEquals diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafetyTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafetyTest.kt similarity index 98% rename from app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafetyTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafetyTest.kt index 171c3a1c21..59b12bbe11 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafetyTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafetyTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.standard +package com.ai.assistance.operit.core.tools.builtin.shell import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicyTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicyTest.kt similarity index 98% rename from app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicyTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicyTest.kt index 13e64bb888..e080f0701a 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicyTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicyTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.defaultTool.websession.browser +package com.ai.assistance.operit.core.tools.builtin.web.session.browser import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetentionTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetentionTest.kt index 3a0c7e1f15..6f8d9bdb9f 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetentionTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/javascript/ComposeDslActionRetentionTest.kt @@ -1,7 +1,7 @@ package com.ai.assistance.operit.core.tools.javascript -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslNode -import com.ai.assistance.operit.core.tools.packTool.ToolPkgComposeDslRenderResult +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslNode +import com.ai.assistance.operit.core.tools.packTool.uidsl.ToolPkgComposeDslRenderResult import org.junit.Assert.assertEquals import org.junit.Test diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupportTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupportTest.kt similarity index 93% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupportTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupportTest.kt index d35cf46331..758a06c0d9 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupportTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupportTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletionTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletionTest.kt similarity index 97% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletionTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletionTest.kt index 0029e8141d..44142da237 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletionTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletionTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import java.io.File import org.junit.Assert.* diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactoryTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactoryTest.kt similarity index 98% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactoryTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactoryTest.kt index 21b9a260f0..b2e2dce0c4 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactoryTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactoryTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.install import java.io.File import java.util.zip.ZipFile diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiDeclarationTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiDeclarationTest.kt similarity index 94% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiDeclarationTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiDeclarationTest.kt index 4120602b8e..ea22409f93 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiDeclarationTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiDeclarationTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOriginCodecTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOriginCodecTest.kt similarity index 97% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOriginCodecTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOriginCodecTest.kt index 852d956d03..901b81b2ba 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOriginCodecTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOriginCodecTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.metadata import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestSelectionTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgManifestSelectionTest.kt similarity index 96% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestSelectionTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgManifestSelectionTest.kt index ad599bdbc0..0baf087163 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestSelectionTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgManifestSelectionTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.parser import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResultTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResultTest.kt similarity index 97% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResultTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResultTest.kt index cb08885360..0d021ab2fa 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResultTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResultTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import com.ai.assistance.operit.core.tools.PackageActivationErrorCode import com.ai.assistance.operit.core.tools.PackageActivationErrorData diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManagerTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManagerTest.kt similarity index 98% rename from app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManagerTest.kt rename to app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManagerTest.kt index 07da7c22b6..4ef2f1134d 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManagerTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManagerTest.kt @@ -1,4 +1,4 @@ -package com.ai.assistance.operit.core.tools.packTool +package com.ai.assistance.operit.core.tools.packTool.runtime import android.content.Context import com.ai.assistance.operit.core.tools.javascript.JsEngine diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitiesTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitiesTest.kt index c221b3707d..0159b753dd 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitiesTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitiesTest.kt @@ -1,28 +1,28 @@ package com.ai.assistance.operit.core.tools.permissions -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel -import com.ai.assistance.operit.core.tools.system.ShellIdentity +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.system.shell.ShellIdentity import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Test import java.util.Locale class PermissionCapabilitiesTest { - @Test fun userModesAreExactlyThreeAndLegacyNamesMapToAdmin() { + @Test fun userModesAreExactlyThreeAndLegacyNamesAreNotRuntimeModes() { assertEquals(listOf("STANDARD", "ADMIN", "ROOT"), AndroidPermissionLevel.values().map { it.name }) - for (name in listOf("ACCESSIBILITY", "DEBUGGER", "accessibility", "debugger", "ADMIN")) { - assertEquals(AndroidPermissionLevel.ADMIN, AndroidPermissionLevel.fromString(name)) + for (name in listOf("ACCESSIBILITY", "DEBUGGER", "accessibility", "debugger")) { + assertEquals(AndroidPermissionLevel.STANDARD, AndroidPermissionLevel.fromString(name)) } assertEquals(AndroidPermissionLevel.STANDARD, AndroidPermissionLevel.fromString(null)) assertEquals(AndroidPermissionLevel.STANDARD, AndroidPermissionLevel.fromString("unknown")) assertEquals(AndroidPermissionLevel.ROOT, AndroidPermissionLevel.fromString("ROOT")) } - @Test fun legacyNamesDoNotDependOnDeviceLocale() { + @Test fun modeNamesDoNotDependOnDeviceLocale() { val previous = Locale.getDefault() try { Locale.setDefault(Locale.forLanguageTag("tr-TR")) - assertEquals(AndroidPermissionLevel.ADMIN, AndroidPermissionLevel.fromString("accessibility")) + assertEquals(AndroidPermissionLevel.ROOT, AndroidPermissionLevel.fromString("root")) assertEquals(AndroidPermissionLevel.ADMIN, AndroidPermissionLevel.fromString("admin")) } finally { Locale.setDefault(previous) diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySessionTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySessionTest.kt index 8d60cc3334..1ef141d541 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySessionTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionCapabilitySessionTest.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.permissions -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionOperationRouterTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionOperationRouterTest.kt index 3a9fcf4e80..9dd4d378e8 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionOperationRouterTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/permissions/PermissionOperationRouterTest.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.permissions -import com.ai.assistance.operit.core.tools.system.AndroidPermissionLevel +import com.ai.assistance.operit.core.tools.permissions.AndroidPermissionLevel import kotlinx.coroutines.CancellationException import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals diff --git a/app/src/test/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuardTest.kt b/app/src/test/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuardTest.kt index e2bf47f33c..e1219bb19b 100644 --- a/app/src/test/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuardTest.kt +++ b/app/src/test/java/com/ai/assistance/operit/core/tools/system/uiautomator/UiAutomatorDumpGuardTest.kt @@ -1,6 +1,6 @@ package com.ai.assistance.operit.core.tools.system.uiautomator -import com.ai.assistance.operit.core.tools.system.AndroidShellExecutor +import com.ai.assistance.operit.core.tools.system.shell.AndroidShellExecutor import java.io.File import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger diff --git a/docs/TODO/chore/README.md b/docs/TODO/chore/README.md index 86074d4ee5..3139c84750 100644 --- a/docs/TODO/chore/README.md +++ b/docs/TODO/chore/README.md @@ -6,6 +6,8 @@ ## 计划索引 +- [工具权限收口与目录整理](tools-permissions-layout/index.md) + - [1.12.2+15 分仓与布局修复发行](release-1.12.2-plus-15/index.md) - [正式版、补丁与离线资源分仓](release-repositories/index.md) diff --git a/docs/TODO/chore/tools-permissions-layout/01-permissions.md b/docs/TODO/chore/tools-permissions-layout/01-permissions.md new file mode 100644 index 0000000000..48621d0dcb --- /dev/null +++ b/docs/TODO/chore/tools-permissions-layout/01-permissions.md @@ -0,0 +1,25 @@ +# 01 权限实现收口 + +## 原实现与目标 + +用户模式已经是 `STANDARD`、`ADMIN`、`ROOT`,但文件、系统、设备和 UI 工具仍经过无障碍、调试、管理员等历史继承层。目标是让工具实现直接对应实际职责,管理员统一使用已授权的无障碍和 Shizuku,Root 保留自身 UI 行为及现有能力选择。 + +## 修改范围 + +- 文件工具:将调试文件实现与管理员路由合并,直接继承标准文件工具,保留只读与写入操作原有路由。 +- UI 工具:将无障碍操作与 Shell 操作收入管理员工具,显式区分内部操作方法;Root 继续继承管理员实现。 +- 系统工具:管理员直接继承标准实现,承接原 Shell 操作。 +- 设备信息及 Root 文件、系统工具:移除没有独立行为的工具壳,通过现有授权能力选择执行后端。 +- Shell 与操作监听器:将 `Debugger` 实现准确命名为 `Shizuku`,同步工厂、日志和提示。 +- 配置:历史值只由现有 DataStore 迁移入口转换为 `ADMIN`,运行时模式解析只识别三档名称。 +- 回归覆盖:维护现有权限能力组合与偏好迁移测试,交由仓库工作流执行。 + +## 验收 + +- [x] 工具实现中不再存在无障碍等级、调试等级及对应继承层 +- [x] 管理员包含原无障碍和 Shell 操作,Root 保留原操作行为 +- [x] 运行时模式只有标准、管理员、Root,旧偏好可迁移 +- [x] 工具名称、参数和结果格式保持现有契约 +- [x] 静态引用与语法检查完成,操作体迁移逐项对比;仓库编译与运行验证结果在 PR 中记录 + +[DONE] 权限收口代码及静态核对完成,运行验证以工作流结果为准。 diff --git a/docs/TODO/chore/tools-permissions-layout/02-layout.md b/docs/TODO/chore/tools-permissions-layout/02-layout.md new file mode 100644 index 0000000000..f7ab80bf3d --- /dev/null +++ b/docs/TODO/chore/tools-permissions-layout/02-layout.md @@ -0,0 +1,303 @@ +# 02 工具目录迁移 + +权限收口提交完成后读取工具源码,再以 [files.json](files.json) 作为本批逐文件迁移依据。清单记录当前路径、目标路径、源包名、目标包名和源文件摘要;执行前核对摘要,执行后核对文件与包名。 + +## 目标结构 + +以下仅展示本批涉及的目录,其余已有职责目录保持原有归属。 + +```text +core/tools/ + builtin/ + filesystem/ + ui/ + device/ + system/ + shell/ + terminal/ + web/ + session/ + calculator/ + workflow/ + chat/ + settings/ + media/ + memory/ + a2ui/ + packTool/ + PackageDebugRefreshReceiver.kt + ToolPkgDebugInstallReceiver.kt + ToolPkgComposeDslDebugDumpReceiver.kt + parser/ + loader/ + runtime/ + install/ + minify/ + uidsl/ + metadata/ + runtime/ + permissions/ + authorization/ + system/ + shell/ + capture/ + terminal/ +``` + +## 迁移规则 + +- 内置工具按功能组织,标准、管理员、Root 实现放在同一功能目录 +- 插件包按解析、加载、运行、安装、压缩、UI DSL 和元数据归类 +- 工具执行与注册入口集中到 runtime,授权安装与检测集中到 permissions/authorization +- 同步 Kotlin 引用、同包隐式依赖、Manifest 组件、脚本显式组件及测试资源路径 +- 目录迁移保持具体操作体,既有逻辑完善分别记录在权限收口提交中 + +- 安装、刷新与 UI DSL 调试广播接收器保留既有公开组件名,现有 ADB 与编辑器调用继续使用原入口 + +## 文件清单 + +共 117 个文件,迁移 111 个,保留已合理分区或已有公开入口的文件 6 个。以下路径均相对于仓库根目录。 + +- 迁移:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/ffmpeg/ffmpeg_probe.js` + - 目标:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/media/ffmpeg/ffmpeg_probe.js` +- 迁移:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js` + - 目标:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js` +- 迁移:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/probe.js` + - 目标:`app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/probe.js` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolDefinitions.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolDefinitions.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolRuntime.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolRuntime.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardCalculator.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/calculator/StandardCalculator.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardChatManagerTool.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/chat/StandardChatManagerTool.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardDeviceInfoToolExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/device/StandardDeviceInfoToolExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/PathValidator.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/PathValidator.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminFileSystemTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/AdminFileSystemTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSoftwareSettingsModifyTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/StandardSoftwareSettingsModifyTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafety.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafety.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardShellToolExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/StandardShellToolExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminSystemOperationTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/AdminSystemOperationTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminUITools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootUITools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/CookiePrivacyManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/CookiePrivacyManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserDownloadSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserDownloadSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicy.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicy.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserPageExecutionSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserPageExecutionSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserToolSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserToolSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserWebViewSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserWebViewSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHost.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHost.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHostState.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHostState.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionHistoryStore.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionHistoryStore.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionPermissionRequestActivity.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionPermissionRequestActivity.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionWebViewHost.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionWebViewHost.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptCapabilityRegistry.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptCapabilityRegistry.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMatcher.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMatcher.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMetadataParser.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMetadataParser.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptModels.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptModels.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportCoordinator.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportCoordinator.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportPickerActivity.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportPickerActivity.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptBootstrapScript.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptBootstrapScript.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptCookieService.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptCookieService.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptStorageNotifier.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptStorageNotifier.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptTabStateStore.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptTabStateStore.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptWebRequestEngine.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptWebRequestEngine.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/WebSessionUserscriptManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/WebSessionUserscriptManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptEntities.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptEntities.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptJsonStore.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptJsonStore.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptRepository.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptRepository.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/ui/WebSessionUserscriptUiStateStore.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/ui/WebSessionUserscriptUiStateStore.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWorkflowTools.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/builtin/workflow/StandardWorkflowTools.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslDebugDumpReceiver.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslDebugDumpReceiver.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupport.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupport.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletion.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletion.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactory.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactory.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoadOrder.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoadOrder.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoader.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoader.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/BuiltInPackageDefaults.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/BuiltInPackageDefaults.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgCommonPluginConstants.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgCommonPluginConstants.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestRequirement.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgManifestRequirement.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOrigin.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOrigin.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgTemplateModels.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgTemplateModels.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/PluginActivityStore.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/PluginActivityStore.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt` +- 保留:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgJsAstMinifier.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgJsAstMinifier.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResult.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResult.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManagerToolPkgFacade.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManagerToolPkgFacade.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgHookModels.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgHookModels.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgRuntimeMonitor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgRuntimeMonitor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslParser.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/uidsl/ToolPkgComposeDslParser.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidPermissionLevel.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/permissions/AndroidPermissionLevel.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/AccessibilityProviderInstaller.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/AccessibilityProviderInstaller.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/RootAuthorizer.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/RootAuthorizer.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuAuthorizer.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuAuthorizer.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuInstaller.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuInstaller.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHandler.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHandler.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHook.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHook.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/ToolExecutionLimits.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolExecutionLimits.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/ToolProgressBus.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolProgressBus.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionCaptureManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionCaptureManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionHolder.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionHolder.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureActivity.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureActivity.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureService.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureService.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidShellExecutor.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/AndroidShellExecutor.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/OperitTerminalManager.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/OperitTerminalManager.kt` +- 迁移:`app/src/main/java/com/ai/assistance/operit/core/tools/system/Terminal.kt` + - 目标:`app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/Terminal.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolsTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolsTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupportTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupportTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafetyTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafetyTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicyTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicyTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupportTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupportTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletionTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletionTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactoryTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactoryTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiDeclarationTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiDeclarationTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOriginCodecTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOriginCodecTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestSelectionTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgManifestSelectionTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResultTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResultTest.kt` +- 迁移:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManagerTest.kt` + - 目标:`app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManagerTest.kt` + +## 验收 + +- [x] 清单中所有目标路径及包名一致 +- [x] 旧引用、同包隐式依赖和显式组件调用已同步 +- [x] 移动文件的操作体保持,静态语法与差异检查完成 +- [x] 仓库验证入口与交付方式已记录,实际运行结果见 PR + +[DONE] 清单中的目录迁移及静态核对完成,编译与 JVM 单测结果由仓库工作流确认。 diff --git a/docs/TODO/chore/tools-permissions-layout/files.json b/docs/TODO/chore/tools-permissions-layout/files.json new file mode 100644 index 0000000000..1a8dcc4801 --- /dev/null +++ b/docs/TODO/chore/tools-permissions-layout/files.json @@ -0,0 +1,1060 @@ +{ + "schemaVersion": 1, + "baseCommit": "718707fd19ab7c27e38c8807055c80809d25e6dc", + "scope": "工具权限收口后的目录迁移", + "files": [ + { + "source": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/ffmpeg/ffmpeg_probe.js", + "target": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/media/ffmpeg/ffmpeg_probe.js", + "sourcePackage": null, + "targetPackage": null, + "group": "android-js/builtin/media/ffmpeg", + "operation": "move", + "sourceSha256": "1fa1a507372b221f4f2d81617edc482afed954e2130a7f27479b42a0c86fc93c" + }, + { + "source": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js", + "target": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js", + "sourcePackage": null, + "targetPackage": null, + "group": "android-js/builtin/web/browser", + "operation": "move", + "sourceSha256": "29befc725e9bb7872a7b5e68ae55e5ddfe0d731b07d870944687f0ca3b9f32a9" + }, + { + "source": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/probe.js", + "target": "app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/probe.js", + "sourcePackage": null, + "targetPackage": null, + "group": "android-js/builtin/web/browser", + "operation": "move", + "sourceSha256": "4e9a9170e4f9714b6bac55b72f45e15c429312d254e53f4526b9dfbd6c64313d" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin", + "group": "builtin", + "operation": "move", + "sourceSha256": "a68f991a7d7dcab3efc983fb5999847e236426bcb7e37f79eb981c5fafef691a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolDefinitions.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolDefinitions.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.a2ui", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.a2ui", + "group": "builtin/a2ui", + "operation": "move", + "sourceSha256": "5336bc3f49a03912712f14588ac630a719cedc626c7f9e6c6d6b2143e7006c96" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolRuntime.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolRuntime.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.a2ui", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.a2ui", + "group": "builtin/a2ui", + "operation": "move", + "sourceSha256": "ff01825f817b7c0fbe1fe7c3ff93b0ce8c1f842c80871f667d59b8699db743da" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.a2ui", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.a2ui", + "group": "builtin/a2ui", + "operation": "move", + "sourceSha256": "25e4ccb6b94570ffd06e32649399e3b10bb5be425e671075965e01e2182dc513" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardCalculator.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/calculator/StandardCalculator.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.calculator", + "group": "builtin/calculator", + "operation": "move", + "sourceSha256": "79bcdcb659c1391b575854e47d6cec56b9f1c0bb3728223355055660ae93f894" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardChatManagerTool.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/chat/StandardChatManagerTool.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.chat", + "group": "builtin/chat", + "operation": "move", + "sourceSha256": "ec054348c9996be0c507c134bc5078d20fcfccf0ba9925b4f54a3e4c0e11456e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardDeviceInfoToolExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/device/StandardDeviceInfoToolExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.device", + "group": "builtin/device", + "operation": "move", + "sourceSha256": "4ec9a994a0dda069b7ef05428241f87e5cc1cdec0845354286dbaa7f3c16fb8a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminFileSystemTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/AdminFileSystemTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.admin", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.filesystem", + "group": "builtin/filesystem", + "operation": "move", + "sourceSha256": "9e92411bd6fd6d094889792eacd6f1e25ce3839d6f80e81dbafc29cc70e05b06" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.filesystem", + "group": "builtin/filesystem", + "operation": "move", + "sourceSha256": "90d9f5b4cfd6c4e6a211d560b9734484003bd2dfb9ea27bc4a115959108fabc6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/PathValidator.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/PathValidator.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.filesystem", + "group": "builtin/filesystem", + "operation": "move", + "sourceSha256": "666052a44cc6b747a6e309f2eabd34a7985cad9d0c2beeb0fcc79a1202f66868" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.filesystem", + "group": "builtin/filesystem", + "operation": "move", + "sourceSha256": "2a5d727822768e073d7ec59f4a9defb66d1dfe5a54b91ad0d1f6c1c10ef245b9" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.filesystem", + "group": "builtin/filesystem", + "operation": "move", + "sourceSha256": "c91d4761af374e11c124e2d84dbb8ad115027406d76244e251bdb202ed5759fa" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.media", + "group": "builtin/media", + "operation": "move", + "sourceSha256": "a90c17d7f7393097ec8bb087a19f0595651109b342d5c0d7c04b6408f66edb53" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.media", + "group": "builtin/media", + "operation": "move", + "sourceSha256": "2f8cf167a5c2e530ce6f8fa65dda91715c0a0bad6fe2f507e32e4af32c538018" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.media", + "group": "builtin/media", + "operation": "move", + "sourceSha256": "8ee46026a26b5cf9b3d46a9930f341ece9d8aa35bf4b5a9d64968c7a4cccbeeb" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.memory", + "group": "builtin/memory", + "operation": "move", + "sourceSha256": "bd3ec607ee528c0874761658d25f6721da6df2614c3261f7a8227b2c7770b11e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSoftwareSettingsModifyTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/StandardSoftwareSettingsModifyTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.settings", + "group": "builtin/settings", + "operation": "move", + "sourceSha256": "7be8c2bf6842c4204fe215f82bcf0bb54f85b0d361ccba6aa4a33bbdcb060b2a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.settings", + "group": "builtin/settings", + "operation": "move", + "sourceSha256": "5ca4b53b37c7ec51b1c99afe76beeeaf0ccbb077daa2c17fa9ec68ca8a5ba6ef" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafety.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafety.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.shell", + "group": "builtin/shell", + "operation": "move", + "sourceSha256": "ed8dbbe94e9e7392f92e3925c8567e9f2fd439a37205b4d48c27d95dfd815128" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardShellToolExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/shell/StandardShellToolExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.shell", + "group": "builtin/shell", + "operation": "move", + "sourceSha256": "bbc33d60d4ff81ee4545510431ebad946b1adc6e2e10adbcc4594a97e6b844af" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminSystemOperationTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/AdminSystemOperationTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.admin", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.system", + "group": "builtin/system", + "operation": "move", + "sourceSha256": "2905543b02cfd2e69381d84f10e886fcc1c44f04a89b3f00c2eed70648dfa423" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.system", + "group": "builtin/system", + "operation": "move", + "sourceSha256": "f734bf44f9d63c5c605fb0eb45252e1fa8a258340b918ce59d04a38817eab229" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.system", + "group": "builtin/system", + "operation": "move", + "sourceSha256": "586b2f4b275f8c80014b0b2af462ad294e512760551e34c08b30ea3fdfc2c317" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.system", + "group": "builtin/system", + "operation": "move", + "sourceSha256": "3b5445ba9b2c384a9d37c0ae36bad92f7a5afa9e52014eb7e54190d5ea722b0e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.terminal", + "group": "builtin/terminal", + "operation": "move", + "sourceSha256": "1f24869e00d0a1f2f72ee71132499b313bb7bc53be57dfd62fc3e18be8c89ce4" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/AdminUITools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.admin", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.ui", + "group": "builtin/ui", + "operation": "move", + "sourceSha256": "00484a4936ebb5d26c269480a7d439773b7a77c2ba8f81a5208827f960ab9e87" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/RootUITools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.root", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.ui", + "group": "builtin/ui", + "operation": "move", + "sourceSha256": "01df2c3548d66af6a772013af9614e9bbada3184f7faa446bcae05a944c59e22" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.ui", + "group": "builtin/ui", + "operation": "move", + "sourceSha256": "ce013a4d5c295ab04d71c5f0cc442b8ce97391384772b680c836ca9cf7741532" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/CookiePrivacyManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/CookiePrivacyManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web", + "group": "builtin/web", + "operation": "move", + "sourceSha256": "96f3b8544756e0aa14e8f13e819916fd5972dcd0e2da4e1bb4b0bfe418c47515" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web", + "group": "builtin/web", + "operation": "move", + "sourceSha256": "c62dc5e41efe3e9e4b1300a856c04cfff9e99dda826068e45d3185da1ef22992" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web", + "group": "builtin/web", + "operation": "move", + "sourceSha256": "49403df45a4ed708dd93bef1478f445fd6aa0d034f7cca10ddee32a19aa0ea7e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web", + "group": "builtin/web", + "operation": "move", + "sourceSha256": "09a85bab17fd04a915f7c037998589c4a130936c52f9b735ea5f747a742fe3b3" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserDownloadSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserDownloadSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "5967edebda6dca56448928740f9a1aa0543927e71aac63fa01e22e08f5bc60a6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicy.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicy.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "adfc6cbbe604381db73cdab6ea71d6c655fbdeee69cff7ad7170b0de768a98ca" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserPageExecutionSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserPageExecutionSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "f0e6f0797ee3ea32b99425ecec7bd099033d072a22117d0f811dc6910868c2c2" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserToolSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserToolSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "030977e04709519a935acdb47861545942088f9d8408bd91cd249d407d652294" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserWebViewSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserWebViewSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "9205b2ab66bd49ac83f55b57812b84c651a73e4750e2d83bb5da00370d59eabc" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHost.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHost.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "7ff7e74727f41c7fcc642deaee7a38e97b44967948dfc7c085431b6a38a7f77e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionBrowserHostState.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionBrowserHostState.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "1e88fa02a47d45a7a1493c7a012de89687be28d3b23498fa71ac29a5ee240d6e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionHistoryStore.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionHistoryStore.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "75669d76a0c1383a9302ee6e92b5e4c5b23661da4d8f6d9fb3c87da739509c80" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionPermissionRequestActivity.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionPermissionRequestActivity.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "410e33dc6cc2e35920694af3001643dae05ca030a81defcdd26a0f014f6a4a13" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/WebSessionWebViewHost.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/WebSessionWebViewHost.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "e712246b317bbf58e82daf13ae259b668e7d51c3d48b6d10924488d94af2da6a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptCapabilityRegistry.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptCapabilityRegistry.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "b019a3852ad7518c7d913f88f52a0bc9eacfebbbc44de78c33911094f4d2f86f" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMatcher.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMatcher.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "4dc8728f983f447f9387c877d4d4719781186f810ad9dc1ce62cb31e73d3b3c6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptMetadataParser.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptMetadataParser.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "61b10ffe14c148b71438f3e6f1e76fb3880255a83e52d8887d9169468fbf69c2" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/UserscriptModels.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/UserscriptModels.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "e7a21b310f70dbc28bd9524067959ffe0a8fbf0c1abe2545954b031b3e668b3a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportCoordinator.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportCoordinator.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.install", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.install", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "7a6a1b511c4a3be25410b1530580bdca421ab929f8e072cd60abe15a9c991f38" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/install/UserscriptImportPickerActivity.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/install/UserscriptImportPickerActivity.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.install", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.install", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "61ffdbbd288462d933a93ef9328e63fd543a4a98961249d628f880ff2acefd4c" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptBootstrapScript.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptBootstrapScript.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "6758b1a711108961479560eeafe43bbe8994c98aa531a93d4678601cda0249c5" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptCookieService.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptCookieService.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "d6a464a71d9ea7b9defd9ebae36ea7aa843f320307c49dad7b9f1d8ac5bc46bd" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptStorageNotifier.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptStorageNotifier.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "997da1faf8ef4f8c87a93a94bcb9f1e72a69236e41a415be865ea71ba7d621e0" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptTabStateStore.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptTabStateStore.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "d5b0ab291d79aca089d5be30697d12bcf58581ba0dc72f3eb3923a0cae042e14" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/UserscriptWebRequestEngine.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/UserscriptWebRequestEngine.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "b07612abbc090f08ab5c524cd958cc4a5bd2d6ff9802cabcab355879e6d7c963" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/runtime/WebSessionUserscriptManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/runtime/WebSessionUserscriptManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.runtime", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.runtime", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "9e786ffb6f20163cbf85514c38c334ebf3d9dc736fd20a2fd7e2a5618bdb0aeb" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptEntities.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptEntities.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "f1df9f8a0b4733ce6cfcaab0e37a464c1ba44edddc355d097fe1950328ef8594" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptJsonStore.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptJsonStore.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "e9d2907f1c7386357e4b4a7056202428ff33c7dca74e7a6cfb8b744ef16f825e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/storage/UserscriptRepository.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/storage/UserscriptRepository.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.storage", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.storage", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "1e61186ebc622fa8f92d76c52b7ebcf520642d0841e920ab708b4862f5896cda" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/websession/userscript/ui/WebSessionUserscriptUiStateStore.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/session/userscript/ui/WebSessionUserscriptUiStateStore.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.userscript.ui", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.userscript.ui", + "group": "builtin/web/session", + "operation": "move", + "sourceSha256": "47bc1e6d52bb122a246c6911b807c8aaac73d3d25ddcf314f82ab3e8c3b4513e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWorkflowTools.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/builtin/workflow/StandardWorkflowTools.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.workflow", + "group": "builtin/workflow", + "operation": "move", + "sourceSha256": "373e12784000553bc6675f1fa97e974391cf1750abd25e7111a254741da8080c" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageDebugRefreshReceiver.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool", + "group": "packTool", + "operation": "keep", + "sourceSha256": "52ecb7abe0804ab14e0d52cae26e8d86050b36c3aee480c637ff2216d96d1298" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslDebugDumpReceiver.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslDebugDumpReceiver.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool", + "group": "packTool", + "operation": "keep", + "sourceSha256": "d8697d409ae36d9717af512aa626d0cc37222ccb17ccbec2585a60beec505272" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool", + "group": "packTool", + "operation": "keep", + "sourceSha256": "64b7a06d29f761e0ddc30d3af7e44ca03c8aa9dca2c901b4f2c78a8494d2d52a" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupport.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupport.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "packTool/install", + "operation": "move", + "sourceSha256": "90b1c892d4fbb8d0e46e5ade9b96c3b351ea59edf9a425422ac01e254729c374" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletion.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletion.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "packTool/install", + "operation": "move", + "sourceSha256": "0d814bdc07218ce2bd3dcfc0e5846efa1a65fed52283d51958c79e2e154e1b3e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactory.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactory.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "packTool/install", + "operation": "move", + "sourceSha256": "1ad69beee67364b4e3e1609f9ec79c21089451a69f4f1cd940e56d2819dcb549" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoadOrder.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoadOrder.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.loader", + "group": "packTool/loader", + "operation": "move", + "sourceSha256": "ec146016ab2252e215aeb5194560b0356401471d000eef2b85509e9a15a0ead5" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgLoader.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/loader/ToolPkgLoader.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.loader", + "group": "packTool/loader", + "operation": "move", + "sourceSha256": "772918135e21bdc11214adb25763d0cd0bec98ca822394749e34e5909f72568d" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/BuiltInPackageDefaults.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/BuiltInPackageDefaults.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "bf72c6bb35ead143ce98e3a547a68c3b88c0d9034e362fb252302b229c7d9164" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/PluginActivityStore.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/PluginActivityStore.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "keep", + "sourceSha256": "abaabd71f03e52746368ef550c4bf7ba88a73de7d2def22bed8b22cb90b0a74e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "bb032bc49a9ec11d86d044af71d344bba1c86c98cad1eadade211e7de0a6bab6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgCommonPluginConstants.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgCommonPluginConstants.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "43e54dd3a4bbd173aa7910b5a3f7fe0824495b00c7daeabe92888590470eb01b" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestRequirement.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgManifestRequirement.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "207a40a4f36b648bdf8b512f744bec00330184e4ec56c183a74d0509558863e2" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOrigin.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOrigin.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "2f53cd45a6cb65683186f9856ac568361f57ece70e2393b68d4a8f29737609b3" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgTemplateModels.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgTemplateModels.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "packTool/metadata", + "operation": "move", + "sourceSha256": "8a0554909f06c342677fd77823a693620055e76338612b1d34daf8e0df3351cb" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgArtifactMinifier.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool.minify", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.minify", + "group": "packTool/minify", + "operation": "keep", + "sourceSha256": "717867cd2823353f83cbd57e9a612c82008159598c586f61396206b9ea84f50e" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgJsAstMinifier.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/minify/ToolPkgJsAstMinifier.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool.minify", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.minify", + "group": "packTool/minify", + "operation": "keep", + "sourceSha256": "8ae17659255fb28f636398e92b424decb75336bfd61de2734866fae539228a9d" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.parser", + "group": "packTool/parser", + "operation": "move", + "sourceSha256": "d9481fe46c859ea3dd5ddacb705cd02af2ac1604d0220b53787d0ad11597c415" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.parser", + "group": "packTool/parser", + "operation": "move", + "sourceSha256": "d3fb8f689da940852e923c357408fa459a688dd232ff371e93c957698cd4f9b0" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResult.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResult.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "43043dc603fcd7c2d7feadcdd76d118ecbca353b31ce5374254f6785d2fcf62c" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "281b64ae3fafb4da46d473e241408f60d49a131775408f1f6abf2a4bcd905ef4" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/PackageManagerToolPkgFacade.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageManagerToolPkgFacade.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "e129b9e9735ccb23f8ae6843f15878b7d064bf7d0b5adb414deb795ebe685103" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgHookModels.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgHookModels.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "1a426bd351bea56d13718ca437321df689fff60dbcc5e2b286bf2b3071672f50" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "51ab8e4f41ad47fe36d246143591b34d9707b60746bf6148212ac02d5e0a9ff6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgRuntimeMonitor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgRuntimeMonitor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "packTool/runtime", + "operation": "move", + "sourceSha256": "bc9ab08144cb8fc5ccf9682425ecbbea81eab7918ea6529409b548f57414d6b3" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgComposeDslParser.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/packTool/uidsl/ToolPkgComposeDslParser.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.uidsl", + "group": "packTool/uidsl", + "operation": "move", + "sourceSha256": "8d33ab0f27409c6df3334331a66920118f61a8b24e87ebe3cbbc501ccd0b3fac" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidPermissionLevel.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/permissions/AndroidPermissionLevel.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.permissions", + "group": "permissions", + "operation": "move", + "sourceSha256": "d22443b90ca90002883556824c1144036f080e0d0e67f1c54d7cc78d3d40a642" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/AccessibilityProviderInstaller.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/AccessibilityProviderInstaller.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.permissions.authorization", + "group": "permissions/authorization", + "operation": "move", + "sourceSha256": "b912919a645c74561f560adfffd4130bca10e7c1a557202a8157f547586f63bb" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/RootAuthorizer.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/RootAuthorizer.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.permissions.authorization", + "group": "permissions/authorization", + "operation": "move", + "sourceSha256": "899a11eb57ea093f148bfe42b9eb5a4e1d37a62c8bee6f0a30327b636b0b0cd0" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuAuthorizer.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuAuthorizer.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.permissions.authorization", + "group": "permissions/authorization", + "operation": "move", + "sourceSha256": "47be3245a57b6d22be40fe97b146fcada81791a753c07317ac05dd230351652b" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/ShizukuInstaller.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/permissions/authorization/ShizukuInstaller.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.permissions.authorization", + "group": "permissions/authorization", + "operation": "move", + "sourceSha256": "85942359b635a9704e50d074b7338b05f080e290e49c8404976f9297971af40c" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHandler.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHandler.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools", + "targetPackage": "com.ai.assistance.operit.core.tools.runtime", + "group": "runtime", + "operation": "move", + "sourceSha256": "169a8a24283b29a1a8e4c0b1418442ba416ca992d37494cb185a00e96c31577b" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/AIToolHook.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/runtime/AIToolHook.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools", + "targetPackage": "com.ai.assistance.operit.core.tools.runtime", + "group": "runtime", + "operation": "move", + "sourceSha256": "3e4913e96095fe38051786992842d48cc9cd0823540ad9845f07793c1905f412" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/ToolExecutionLimits.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolExecutionLimits.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools", + "targetPackage": "com.ai.assistance.operit.core.tools.runtime", + "group": "runtime", + "operation": "move", + "sourceSha256": "14dcd24cb56dbec6c76327b1842739966b55e24bf39f25b9ccff11abb9c97d4d" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/ToolProgressBus.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolProgressBus.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools", + "targetPackage": "com.ai.assistance.operit.core.tools.runtime", + "group": "runtime", + "operation": "move", + "sourceSha256": "8cef67b48a465c515c2f2ef7d97b253c900eac3e07fef3aade2d8532037217d0" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools", + "targetPackage": "com.ai.assistance.operit.core.tools.runtime", + "group": "runtime", + "operation": "move", + "sourceSha256": "9f6fbd82f24b3c865a9d270640e233063bad87b434381864585bd3b08715cba0" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionCaptureManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionCaptureManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.capture", + "group": "system/capture", + "operation": "move", + "sourceSha256": "4716293bd0fb4457e068cbc88aefad77630d431a376dc172e0e6fb53284f7c2f" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/MediaProjectionHolder.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/MediaProjectionHolder.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.capture", + "group": "system/capture", + "operation": "move", + "sourceSha256": "25a5452b759b206dbbf09810e96940583b121e01e08867fa798fc01b1bebd9b6" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureActivity.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureActivity.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.capture", + "group": "system/capture", + "operation": "move", + "sourceSha256": "b81234d7f27ffe5fdd17ac9848251d37eb04f98c3650442bc60816fdca037769" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/ScreenCaptureService.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/capture/ScreenCaptureService.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.capture", + "group": "system/capture", + "operation": "move", + "sourceSha256": "39de34c1dd487169c68d511a228cbd986a134b3a4b4c6ad2b6e8d9c1665e74d7" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/AndroidShellExecutor.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/shell/AndroidShellExecutor.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.shell", + "group": "system/shell", + "operation": "move", + "sourceSha256": "cdca5059498e1b37e079d72a650d22b93424411626654e144edde03c2837f246" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/OperitTerminalManager.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/OperitTerminalManager.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.terminal", + "group": "system/terminal", + "operation": "move", + "sourceSha256": "a3c477aaa53a61773a2cd1049cda6179cbfc13b61f4cb34330bd1296a49747f2" + }, + { + "source": "app/src/main/java/com/ai/assistance/operit/core/tools/system/Terminal.kt", + "target": "app/src/main/java/com/ai/assistance/operit/core/tools/system/terminal/Terminal.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.system", + "targetPackage": "com.ai.assistance.operit.core.tools.system.terminal", + "group": "system/terminal", + "operation": "move", + "sourceSha256": "45a22a4932c2af47b5db3311f5e43966b1e76cfddb2aa543d52faf7e87228a10" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/a2ui/A2uiToolsTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/builtin/a2ui/A2uiToolsTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.a2ui", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.a2ui", + "group": "tests/builtin/a2ui", + "operation": "move", + "sourceSha256": "a83003debdc5de0ea0d036c749dc4ce6411484006de3965508dfa37c5bd355d0" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ToolPermissionModeSupportTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/builtin/settings/ToolPermissionModeSupportTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.settings", + "group": "tests/builtin/settings", + "operation": "move", + "sourceSha256": "dcfda6fc6fe18b27b6d6b8d41cdfbbec74c3f1572318c8a74bded90de3ceffe3" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/standard/ShellCommandSafetyTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/builtin/shell/ShellCommandSafetyTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.standard", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.shell", + "group": "tests/builtin/shell", + "operation": "move", + "sourceSha256": "3b2017bb1684fd2944d9b27dcaadfccb58d89147610c43d459bbea08af92049f" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/defaultTool/websession/browser/BrowserNavigationPolicyTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/builtin/web/session/browser/BrowserNavigationPolicyTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.defaultTool.websession.browser", + "targetPackage": "com.ai.assistance.operit.core.tools.builtin.web.session.browser", + "group": "tests/builtin/web/session/browser", + "operation": "move", + "sourceSha256": "ea47f6a2bd3017de431c3a836cc7bbd3909e5c55feb250973668e37cf0a6a377" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageFileImportSupportTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageFileImportSupportTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "tests/packTool/install", + "operation": "move", + "sourceSha256": "e3d2784fd4a2cf4a4031433d5e192ca63e962eab1727357515ad6625eecf080c" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageSourceDeletionTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageSourceDeletionTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "tests/packTool/install", + "operation": "move", + "sourceSha256": "d80e4119332e0c939867331e7e7f33ba30e1cfa58bc432d76c53a2711cfb2bd3" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageTemplateFactoryTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/install/PackageTemplateFactoryTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.install", + "group": "tests/packTool/install", + "operation": "move", + "sourceSha256": "ece1af8d1ca93308a36aac08251dea5e95db3c201cf44403a579457d939e5ab7" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiDeclarationTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiDeclarationTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "tests/packTool/metadata", + "operation": "move", + "sourceSha256": "de21af2f58f85d67659fe7e2659085a40b17afc144ef528c75b9b9a1dc638334" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMarketOriginCodecTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgMarketOriginCodecTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.metadata", + "group": "tests/packTool/metadata", + "operation": "move", + "sourceSha256": "ac68a386de7dab0b8dfb2758230acc6b6e3ff3f0e9461b9f0e5594e9bc9f59ec" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManifestSelectionTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgManifestSelectionTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.parser", + "group": "tests/packTool/parser", + "operation": "move", + "sourceSha256": "68442d9fa53207bec8e609a47a6e30a8331d620c05fd3cc17343d5c7268e356d" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/PackageActivationResultTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/PackageActivationResultTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "tests/packTool/runtime", + "operation": "move", + "sourceSha256": "e951755e4839bbaadbf1eb164c8936e11684ba15d63e5c23fc9893d1864a2a03" + }, + { + "source": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgManagerTest.kt", + "target": "app/src/test/java/com/ai/assistance/operit/core/tools/packTool/runtime/ToolPkgManagerTest.kt", + "sourcePackage": "com.ai.assistance.operit.core.tools.packTool", + "targetPackage": "com.ai.assistance.operit.core.tools.packTool.runtime", + "group": "tests/packTool/runtime", + "operation": "move", + "sourceSha256": "81ffb753a0aa956bc0082690a1102c2f6b72b1bd0b9632b856a86de37638f1ec" + } + ] +} diff --git a/docs/TODO/chore/tools-permissions-layout/index.md b/docs/TODO/chore/tools-permissions-layout/index.md new file mode 100644 index 0000000000..1f448399d7 --- /dev/null +++ b/docs/TODO/chore/tools-permissions-layout/index.md @@ -0,0 +1,32 @@ +--- +fork: https://github.com/3316891527/Operit +status: implemented +--- +# 工具权限收口与目录整理 + +本次工作先将工具权限实现统一为标准、管理员和 Root 三档,再依据逐文件迁移清单整理工具目录。权限收口与目录迁移分别提交,便于核对行为变化与路径变化。 + +## 当前状况 + +用户可选模式已经是 `STANDARD`、`ADMIN`、`ROOT`,工具实现仍保留 Standard、Accessibility、Debugger、Admin、Root 多层继承。`core.tools.packTool` 的解析、加载、运行、安装、界面 DSL 和元数据文件混合放置,工具的其他目录也需要按职责整理。 + +## 执行顺序 + +1. [权限实现收口](01-permissions.md):删除旧工具等级和无行为的中间层,管理员按实际授权使用无障碍、Shizuku,Root 复用管理员能力。 +2. [目录迁移](02-layout.md):读取权限收口后的工具源码,先记录逐文件当前路径、目标路径及目标包名,再按清单迁移并同步引用。 + +迁移清单只记录本次实际迁移的文件。目录整理以保持工具调用接口及现有行为为目标。 + +## 验证与交付 + +记录静态引用、路径、配置及差异检查,编译与 JVM 单测通过仓库工作流验证。推送工作分支后先派发仓库工作流,再创建以 `dev` 为目标的 PR。工作流受理与实际运行结果分别记录。 + +详见[验证记录](verification.md)。 + +## 进度 + +- [x] 权限实现统一为三档,旧配置只在迁移入口识别 +- [x] 形成逐文件目标路径清单 +- [x] 完成清单中全部迁移及调用方同步 +- [x] 完成静态核对并准备工作分支交付 +- [ ] 远端构建与 JVM 单测结果确认 diff --git a/docs/TODO/chore/tools-permissions-layout/verification.md b/docs/TODO/chore/tools-permissions-layout/verification.md new file mode 100644 index 0000000000..13a02bf7cb --- /dev/null +++ b/docs/TODO/chore/tools-permissions-layout/verification.md @@ -0,0 +1,28 @@ +# 验证记录 + +本次交付分为权限实现收口和工具目录迁移两部分。目录迁移以 [files.json](files.json) 为依据,当前共 117 个文件,其中迁移 111 个,保留 6 个。 + +## 静态核对 + +- 权限收口逐项比较 61 个原操作体及辅助方法,以及 17 个管理员文件操作路由,保留原操作实现和只读标记 +- 目录迁移比较 264 份受影响 Kotlin 文件的声明内容,除包名、导入和清单对应的显式路径引用外未发现其他变化 +- 核对清单全部目标文件、目标包名、迁移符号导入及工具导入名称冲突 +- 共享注册常量的跨包导入同时覆盖普通引用和字符串插值,保留注册校验及错误提示的现有内容 +- 静态语法扫描未发现新增问题;最终类型检查与编译结果以仓库工作流为准 +- 核对变更 XML、Python 语法、Markdown 本地链接与 Git 差异空白 +- 安装、刷新与 UI DSL 调试广播保持原公开组件名,现有 ADB 和编辑器调用仍使用原入口 + +## 仓库验证 + +- [Build](../../../../.github/workflows/build.yml):工作分支执行 `assembleDebug` +- [Android Tests](../../../../.github/workflows/android-tests.yml):工作分支执行 Android JVM 单测 +- PR 的 Candidate checks 根据实际差异选择技术检查 + +本地未执行编译、构建或测试。工作流派发受理与最终运行结果分别记录在 PR 中,派发成功不代表构建或测试已经通过。 + +## 对应回归范围 + +- `PermissionCapabilitiesTest` 覆盖三档用户模式与 16 种授权状态组合,共 48 组能力选择,以及显式显示器和 Shell 身份选择 +- `PermissionOperationRouterTest` 与 `PermissionCapabilitySessionTest` 覆盖原有操作路由及会话能力缓存 +- `AndroidPermissionModeMigrationTest` 覆盖旧偏好转换为管理员,以及 Root 和其他偏好的保留 +- 插件包、内置工具和 JS 测试随目录迁移同步包名、引用和资源路径,具体运行结果以仓库工作流为准 \ No newline at end of file diff --git a/docs/doc-src/architecture/DEFAULT_TOOLS_ARCH.md b/docs/doc-src/architecture/DEFAULT_TOOLS_ARCH.md index 1f1c896205..89f15c781b 100644 --- a/docs/doc-src/architecture/DEFAULT_TOOLS_ARCH.md +++ b/docs/doc-src/architecture/DEFAULT_TOOLS_ARCH.md @@ -40,7 +40,7 @@ ### 2.2 必改:工具注册(toolName -> executor) -- **文件**:`app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` +- **文件**:`app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` - **你要做的事**: - 确认工具名不变时,一般无需改注册,但要确认调用到的 executor 没变 - 若工具名/分组变更,需要同步调整注册项 @@ -52,15 +52,19 @@ ### 2.3 必改:Kotlin 执行实现(参数读取与校验) - **常见目录**: - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/*` - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/debugger/*` - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/admin/*` - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/root/*` - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/*` - - `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/ToolGetter.kt`(按权限级别选择具体实现) + - `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/` + - `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/` + - `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/` + - `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/` + - `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ToolGetter.kt`(按三档模式取得工具) +- **权限模型**: + - 用户模式只有 `STANDARD`、`ADMIN`、`ROOT` + - 管理员工具直接包含无障碍与 Shell 操作,按实际授权选择执行能力 + - Root 复用管理员公共能力,并保留专有 UI 实现 + - 无障碍、Shizuku 是执行后端,历史无障碍、调试模式仅由偏好迁移入口转换为管理员 - **你要做的事**: - 将旧参数的读取逻辑替换为新参数(`tool.parameters.find { it.name == "..." }`) - - 如果某个工具在 `debugger/root/admin/accessibility` 目录下有 override / 替代实现:这些实现里同样要同步更新参数读取与校验 + - 同一功能目录中的标准、管理员、Root 实现有 override 时,同步更新参数读取与校验 - 新增参数合法性校验:必填、互斥、默认值、兼容性策略 - 更新错误消息(要能引导正确用法) diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/android.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/android.md index af9546679f..ded8c98465 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/android.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/android.md @@ -152,5 +152,5 @@ console.log(result.action, result.result); - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsLibraries.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsInitRuntimeScriptBuilder.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt` - `docs/doc-src/toolpkg_developer_documentation/04_modules/system.md` diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/ffmpeg.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/ffmpeg.md index 1d544dd3c7..c2e5e976aa 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/ffmpeg.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/ffmpeg.md @@ -255,5 +255,5 @@ interface RuntimeStreamInfo { - `examples/types/tool-types.d.ts` - `app/src/main/assets/packages/ffmpeg.js` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFFmpegTool.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardFFmpegTool.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/ToolResultDataClasses.kt` diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/files.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/files.md index 037aa7e81f..9a7ecd8203 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/files.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/files.md @@ -457,7 +457,7 @@ await Tools.Files.download({ - `examples/types/files.d.ts` - `examples/types/results.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardFileSystemTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/LinuxFileSystemTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/SafFileSystemTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/StandardFileSystemTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/LinuxFileSystemTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/filesystem/SafFileSystemTools.kt` diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/memory.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/memory.md index 494709a0a6..70c2051876 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/memory.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/memory.md @@ -395,8 +395,8 @@ console.log(link.linkType, link.weight); - `examples/types/memory.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/MemoryQueryToolExecutor.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/memory/MemoryQueryToolExecutor.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/ToolResultDataClasses.kt` - [结果类型参考](./results.md) - [全局运行时 API](../03_runtime/global_api.md) diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/network.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/network.md index 2a6da43f17..022897582f 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/network.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/network.md @@ -500,7 +500,7 @@ await Tools.Net.browserClick({ - `examples/types/network.d.ts` - `examples/types/results.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardWebVisitTool.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardBrowserSessionTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardWebVisitTool.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardBrowserSessionTools.kt` diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/okhttp.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/okhttp.md index 9a6e254be6..47cee8b1b0 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/okhttp.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/okhttp.md @@ -254,8 +254,8 @@ console.log(response.text()); - `app/src/main/assets/js/OkHttp3.js` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsAssetLoader.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsLibraries.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardHttpTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/web/StandardHttpTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/ToolResultDataClasses.kt` - [网络模块参考](./network.md) - [结果类型参考](./results.md) diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/system.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/system.md index f540c61e50..077bc41c15 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/system.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/system.md @@ -596,11 +596,11 @@ await Tools.System.music.play({ - `examples/types/system.d.ts` - `examples/types/results.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSystemOperationTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardTerminalCommandExecutor.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/BluetoothSessionManager.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardMusicPlaybackTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardIntentToolExecutor.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardSendBroadcastToolExecutor.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSystemOperationTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/terminal/StandardTerminalCommandExecutor.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/BluetoothSessionManager.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/media/StandardMusicPlaybackTools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardIntentToolExecutor.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/system/StandardSendBroadcastToolExecutor.kt` - [公共结果类型](results.md) diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/tasker.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/tasker.md index 98ed4abba2..7d25af7e20 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/tasker.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/tasker.md @@ -19,7 +19,7 @@ triggerEvent: (params) => toolCall('trigger_tasker_event', params || {}) 相关实现位于: - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` - `app/src/main/java/com/ai/assistance/operit/integrations/tasker/AIAgentTasker.kt` ## `Tasker.TriggerTaskerEventParams` @@ -155,6 +155,6 @@ await Tools.Tasker.triggerEvent({ - `examples/types/tasker.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` - `app/src/main/java/com/ai/assistance/operit/integrations/tasker/AIAgentTasker.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsInitRuntimeScriptBuilder.kt` diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/tool-types.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/tool-types.md index d67d720b3b..30b046b3b1 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/tool-types.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/tool-types.md @@ -312,7 +312,7 @@ disable_workflow - `examples/types/core.d.ts` - `examples/types/results.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` - [公共结果类型](results.md) - [Files 参考](files.md) - [Network 参考](network.md) diff --git a/docs/doc-src/toolpkg_developer_documentation/04_modules/ui.md b/docs/doc-src/toolpkg_developer_documentation/04_modules/ui.md index 8f44e3243d..7cf31a9a16 100644 --- a/docs/doc-src/toolpkg_developer_documentation/04_modules/ui.md +++ b/docs/doc-src/toolpkg_developer_documentation/04_modules/ui.md @@ -262,7 +262,8 @@ await Tools.UI.clickElement({ - `examples/types/results.d.ts` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsTools.kt` - `app/src/main/assets/js/UINode.js` -- `app/src/main/java/com/ai/assistance/operit/core/tools/ToolRegistration.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/standard/StandardUITools.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/defaultTool/accessbility/AccessibilityUITools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/runtime/ToolRegistration.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/StandardUITools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/AdminUITools.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/builtin/ui/RootUITools.kt` - `docs/doc-src/toolpkg_developer_documentation/04_modules/results.md` diff --git a/docs/doc-src/toolpkg_developer_documentation/05_hooks/render_and_toggle.md b/docs/doc-src/toolpkg_developer_documentation/05_hooks/render_and_toggle.md index 8f9741ee31..06941a881e 100644 --- a/docs/doc-src/toolpkg_developer_documentation/05_hooks/render_and_toggle.md +++ b/docs/doc-src/toolpkg_developer_documentation/05_hooks/render_and_toggle.md @@ -102,7 +102,7 @@ ToolPkg.registerInputMenuTogglePlugin({ ## 权威实现 - `plugins/toolpkg/ToolPkgCommonBridgePlugin.kt`:tag 匹配、渲染结果消费、输入 toggle 缓存和 create/toggle 调度。 -- `core/tools/packTool/ToolPkgParser.kt`、`ToolPkgMainRegistrationScriptParser.kt`:注册定义解析。 +- `core/tools/packTool/parser/ToolPkgParser.kt`、`ToolPkgMainRegistrationScriptParser.kt`:注册定义解析。 - `examples/types/toolpkg.d.ts`:公开 payload、定义和返回类型。 相关页面:[ToolPkg 注册 API](../03_runtime/registry.md)、[Compose DSL](../06_ui_and_compose/compose_dsl.md)、[Hook 总索引](./index.md)。 \ No newline at end of file diff --git a/docs/doc-src/toolpkg_developer_documentation/05_hooks/tool_lifecycle.md b/docs/doc-src/toolpkg_developer_documentation/05_hooks/tool_lifecycle.md index 94f705b97c..d81fb91e3e 100644 --- a/docs/doc-src/toolpkg_developer_documentation/05_hooks/tool_lifecycle.md +++ b/docs/doc-src/toolpkg_developer_documentation/05_hooks/tool_lifecycle.md @@ -104,7 +104,7 @@ ToolPkg.registerToolLifecycleHook({ ## 实现依据 - `plugins/toolpkg/ToolPkgToolLifecycleBridge.kt`:事件构造、队列投递、拦截返回解析和 fail-closed 行为。 -- `core/tools/AIToolHook.kt`、`AIToolHandler.kt`:拦截发生在权限检查与 executor 激活前。 +- `core/tools/runtime/AIToolHook.kt`、`AIToolHandler.kt`:拦截发生在权限检查与 executor 激活前。 - `examples/types/toolpkg.d.ts`:当前声明形状。 相关页面:[ToolPkg 注册 API](../03_runtime/registry.md)、[Hook 总索引](./index.md)、[接口覆盖索引](../09_compatibility/coverage.md)。 diff --git a/docs/doc-src/toolpkg_developer_documentation/09_compatibility/api_versions.md b/docs/doc-src/toolpkg_developer_documentation/09_compatibility/api_versions.md index 166400779f..8e25e982a1 100644 --- a/docs/doc-src/toolpkg_developer_documentation/09_compatibility/api_versions.md +++ b/docs/doc-src/toolpkg_developer_documentation/09_compatibility/api_versions.md @@ -74,8 +74,8 @@ status: complete ## 权威实现 -- `app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt` -- `app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt` +- `app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsEngine.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgApiRuntime.kt` - `app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgRegistration.kt` diff --git a/docs/doc-src/toolpkg_developer_documentation/index.md b/docs/doc-src/toolpkg_developer_documentation/index.md index d6287da3c9..9fecb80a5c 100644 --- a/docs/doc-src/toolpkg_developer_documentation/index.md +++ b/docs/doc-src/toolpkg_developer_documentation/index.md @@ -75,8 +75,8 @@ ToolPkg API 版本表示包所依赖的宿主接口契约,独立于包自身 - 全局声明与导出入口:[`examples/types/index.d.ts`](../../../examples/types/index.d.ts) - ToolPkg 注册、Hook、IPC 和 WASM 类型:[`examples/types/toolpkg.d.ts`](../../../examples/types/toolpkg.d.ts) - 各模块声明:[`examples/types/`](../../../examples/types/) -- 包 Manifest 与解析行为:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgParser.kt` -- API 版本支持策略:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgApiVersion.kt` +- 包 Manifest 与解析行为:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgParser.kt` +- API 版本支持策略:`app/src/main/java/com/ai/assistance/operit/core/tools/packTool/metadata/ToolPkgApiVersion.kt` - JS 侧版本门禁与 ToolPkg facade:`app/src/main/java/com/ai/assistance/operit/core/tools/javascript/JsToolPkgApiRuntime.kt`、`JsToolPkgRegistration.kt` - Hook 触发及结果消费:`app/src/main/java/com/ai/assistance/operit/plugins/toolpkg/` diff --git a/tools/adb/JS_ADB_README.md b/tools/adb/JS_ADB_README.md index 3bd22c348b..ac6d8b909c 100644 --- a/tools/adb/JS_ADB_README.md +++ b/tools/adb/JS_ADB_README.md @@ -51,7 +51,7 @@ This makes them suitable for: ## JS Test Suites In This Repo -The directory [app/src/androidTest/js](/d:/Code/prog/assistance/app/src/androidTest/js) contains real JS runtime tests and probes, including: +The directory [app/src/androidTest/js](../../app/src/androidTest/js) contains real JS runtime tests and probes, including: - bridge contract tests - bridge edge-case tests @@ -61,11 +61,11 @@ The directory [app/src/androidTest/js](/d:/Code/prog/assistance/app/src/androidT Representative locations: -- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract) -- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges) -- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract) -- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js) -- [app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js) +- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract) +- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges) +- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract) +- [app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js) +- [app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js](../../app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js) ## Quick Choice @@ -134,7 +134,7 @@ More realistic examples: ```cmd tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\javascript\bridge_contract\bridge_contract_runner.js run @params.json -tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\defaultTool\standard\browser\main.js run "{}" +tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\builtin\web\browser\main.js run "{}" ``` You can still pass inline JSON directly. The scripts now write that JSON into a temporary file and push it to the device, which avoids the old `adb shell am broadcast --es params ...` quoting breakage. On PowerShell, prefer single-quoted JSON like `'{"param1":"value1"}'` or use `@params.json`. @@ -400,7 +400,7 @@ This is best for: ### 2. Add a directory-based runtime test -If the test needs multiple local modules, put it under [app/src/androidTest/js](/d:/Code/prog/assistance/app/src/androidTest/js) and organize it as a small directory-based suite. +If the test needs multiple local modules, put it under [app/src/androidTest/js](../../app/src/androidTest/js) and organize it as a small directory-based suite. Recommended shape: diff --git a/tools/adb/JS_ADB_README_zh.md b/tools/adb/JS_ADB_README_zh.md index 6239f145a0..94f7d2083c 100644 --- a/tools/adb/JS_ADB_README_zh.md +++ b/tools/adb/JS_ADB_README_zh.md @@ -66,7 +66,7 @@ ## 真实测试资产 -仓库里的 [app/src/androidTest/js](/d:/Code/prog/assistance/app/src/androidTest/js) 不是普通示例目录,而是这套工具的重要使用场景之一。 +仓库里的 [app/src/androidTest/js](../../app/src/androidTest/js) 不是普通示例目录,而是这套工具的重要使用场景之一。 其中包括: @@ -78,11 +78,11 @@ 典型目录: -- [bridge_contract](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract) -- [bridge_edges](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges) -- [script_mode_contract](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract) -- [browser main.js](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/core/tools/defaultTool/standard/browser/main.js) -- [ttscleaner.js](/d:/Code/prog/assistance/app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js) +- [bridge_contract](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_contract) +- [bridge_edges](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/bridge_edges) +- [script_mode_contract](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/javascript/script_mode_contract) +- [browser main.js](../../app/src/androidTest/js/com/ai/assistance/operit/core/tools/builtin/web/browser/main.js) +- [ttscleaner.js](../../app/src/androidTest/js/com/ai/assistance/operit/util/ttscleaner/ttscleaner.js) ## 先记结论 @@ -120,7 +120,7 @@ Windows: ```cmd tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\javascript\bridge_contract\bridge_contract_runner.js run @params.json -tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\defaultTool\standard\browser\main.js run "{}" +tools\adb\execute_js_dir.bat app\src\androidTest\js com\ai\assistance\operit\core\tools\builtin\web\browser\main.js run "{}" ``` Linux/macOS: @@ -338,7 +338,7 @@ d:\Code\prog\assistance\.venv\Scripts\python.exe d:\Code\prog\assistance\tools\e ### 2. 加目录化运行时测试 -如果你的测试会引用多个本地模块,建议直接放到 [app/src/androidTest/js](/d:/Code/prog/assistance/app/src/androidTest/js) 下面,按一个小目录来组织。 +如果你的测试会引用多个本地模块,建议直接放到 [app/src/androidTest/js](../../app/src/androidTest/js) 下面,按一个小目录来组织。 推荐组织方式: @@ -555,8 +555,8 @@ exports.myFunction = myFunction; 相关接收器: -- [ScriptExecutionReceiver.kt](/d:/Code/prog/assistance/app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ScriptExecutionReceiver.kt) -- [ToolPkgDebugInstallReceiver.kt](/d:/Code/prog/assistance/app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt) +- [ScriptExecutionReceiver.kt](../../app/src/main/java/com/ai/assistance/operit/core/tools/javascript/ScriptExecutionReceiver.kt) +- [ToolPkgDebugInstallReceiver.kt](../../app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgDebugInstallReceiver.kt) ## 故障排查 diff --git a/tools/package_layout/verify_layout_completion.py b/tools/package_layout/verify_layout_completion.py index 4557eba51a..cdf6b9a0c7 100644 --- a/tools/package_layout/verify_layout_completion.py +++ b/tools/package_layout/verify_layout_completion.py @@ -133,7 +133,7 @@ def main(): native_files = [path for path in tree if path.endswith(('.aidl', '.cpp', '.h', '.rs'))] for path in native_files: require(blob_hash((ROOT / path).read_bytes()) == tree[path][1], 'JNI 或 Binder 协议文件发生变化:' + path) - parser_text = (ROOT / 'app/src/main/java/com/ai/assistance/operit/core/tools/packTool/ToolPkgMainRegistrationScriptParser.kt').read_text() + parser_text = (ROOT / 'app/src/main/java/com/ai/assistance/operit/core/tools/packTool/parser/ToolPkgMainRegistrationScriptParser.kt').read_text() require(parser_text.count('item.optString("runtime").trim().ifBlank { TOOLPKG_RUNTIME_COMPOSE_DSL }') == 2, '界面模块或路由的默认 Compose DSL 被修改') require('return@forEachIndexed' in parser_text, '旧导航声明未忽略') result = { diff --git a/tools/string/count_ui_strings.py b/tools/string/count_ui_strings.py index 38071d38bc..03379a3ec1 100644 --- a/tools/string/count_ui_strings.py +++ b/tools/string/count_ui_strings.py @@ -38,7 +38,7 @@ '\\ui\\features\\settings\\screens\\TagMarketBilingualData.kt', '\\data\\preferences\\CharacterCardBilingualData.kt', '\\data\\preferences\\PromptBilingualData.kt', - '\\core\\tools\\defaultTool\\standard\\StandardUITools.kt' + '\\core\\tools\\builtin\\ui\\StandardUITools.kt' ] def _should_skip_file(file_path: Path) -> bool: