diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9dbeaa95..7ea2bae0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,25 +69,6 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/cpp/asl_pty.c b/app/src/main/cpp/asl_pty.c
index 63b8bae3..dac3ef12 100644
--- a/app/src/main/cpp/asl_pty.c
+++ b/app/src/main/cpp/asl_pty.c
@@ -46,7 +46,7 @@ static void free_cstr_array(char **array) {
* given environment. Returns a two-element int[] { masterFd, pid }, or null on failure.
*/
JNIEXPORT jintArray JNICALL
-Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeForkPty(
+Java_com_ahmadkharfan_androidstudiolite_feature_terminal_pty_NativePty_nativeForkPty(
JNIEnv *env, jclass clazz,
jobjectArray jargv, jobjectArray jenvp, jstring jcwd, jint rows, jint cols) {
(void) clazz;
@@ -104,7 +104,7 @@ Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeForkPty(
/* Tell the kernel the terminal was resized so the child receives SIGWINCH and reflows. */
JNIEXPORT void JNICALL
-Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeSetWinSize(
+Java_com_ahmadkharfan_androidstudiolite_feature_terminal_pty_NativePty_nativeSetWinSize(
JNIEnv *env, jclass clazz, jint fd, jint rows, jint cols) {
(void) env;
(void) clazz;
@@ -117,7 +117,7 @@ Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeSetWinSiz
/* Reap the child; returns its exit code (or 128+signal), or -1 if it isn't our child / already reaped. */
JNIEXPORT jint JNICALL
-Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeWaitFor(
+Java_com_ahmadkharfan_androidstudiolite_feature_terminal_pty_NativePty_nativeWaitFor(
JNIEnv *env, jclass clazz, jint pid) {
(void) env;
(void) clazz;
@@ -134,7 +134,7 @@ Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeWaitFor(
/* Send SIGHUP then close the master, ending the session. */
JNIEXPORT void JNICALL
-Java_com_ahmadkharfan_androidstudiolite_data_local_pty_NativePty_nativeDestroy(
+Java_com_ahmadkharfan_androidstudiolite_feature_terminal_pty_NativePty_nativeDestroy(
JNIEnv *env, jclass clazz, jint fd, jint pid) {
(void) env;
(void) clazz;
diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/MainActivity.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/MainActivity.kt
index b6d7569c..b9bde3b6 100644
--- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/MainActivity.kt
+++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/MainActivity.kt
@@ -21,7 +21,7 @@ import androidx.compose.ui.Modifier
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.PendingInstallConfirmation
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.PendingInstallConfirmation
import com.ahmadkharfan.androidstudiolite.designsystem.theme.AslAppTheme
import com.ahmadkharfan.androidstudiolite.domain.model.AppPreferences
import com.ahmadkharfan.androidstudiolite.domain.model.AppThemeMode
diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/BuildRunModule.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/BuildRunModule.kt
index bf931c73..cb340e2f 100644
--- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/BuildRunModule.kt
+++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/BuildRunModule.kt
@@ -4,7 +4,7 @@ import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStore
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.ApkInstaller
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.ApkInstaller
import com.ahmadkharfan.androidstudiolite.data.buildsystem.signing.AndroidKeystoreManager
import com.ahmadkharfan.androidstudiolite.data.remote.ActiveBuildStore
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.ActiveBuildRepository
diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/GitModule.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/GitModule.kt
index e98ec8be..d4749b13 100644
--- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/GitModule.kt
+++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/GitModule.kt
@@ -6,11 +6,11 @@ import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStore
import com.ahmadkharfan.androidstudiolite.BuildConfig
import com.ahmadkharfan.androidstudiolite.core.environment.IdeEnvironmentPaths
-import com.ahmadkharfan.androidstudiolite.data.local.EncryptedGitCredentialStore
-import com.ahmadkharfan.androidstudiolite.data.local.JGitGitRepository
+import com.ahmadkharfan.androidstudiolite.data.git.EncryptedGitCredentialStore
+import com.ahmadkharfan.androidstudiolite.data.git.JGitGitRepository
import com.ahmadkharfan.androidstudiolite.data.remote.github.GitHubDeviceFlowAuthenticator
-import com.ahmadkharfan.androidstudiolite.data.local.GitOperationCoordinator
-import com.ahmadkharfan.androidstudiolite.data.local.DataStoreGitAuthorStore
+import com.ahmadkharfan.androidstudiolite.data.git.GitOperationCoordinator
+import com.ahmadkharfan.androidstudiolite.data.git.DataStoreGitAuthorStore
import com.ahmadkharfan.androidstudiolite.data.local.DefaultWorkspaceWriteGate
import com.ahmadkharfan.androidstudiolite.domain.repository.GitAuthorStore
import com.ahmadkharfan.androidstudiolite.domain.repository.GitCredentialStore
diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt
index 6bed7f05..f11db6b6 100644
--- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt
+++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/KoinModules.kt
@@ -1,6 +1,6 @@
package com.ahmadkharfan.androidstudiolite.di
import com.ahmadkharfan.androidstudiolite.core.environment.IdeEnvironmentPaths
-import com.ahmadkharfan.androidstudiolite.data.onboarding.AndroidOnboardingRepository
+import com.ahmadkharfan.androidstudiolite.feature.onboarding.data.AndroidOnboardingRepository
import com.ahmadkharfan.androidstudiolite.domain.repository.OnboardingRepository
import com.ahmadkharfan.androidstudiolite.feature.createproject.CreateProjectViewModel
import com.ahmadkharfan.androidstudiolite.feature.editor.EditorViewModel
diff --git a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/TerminalModule.kt b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/TerminalModule.kt
index 699bc5d9..802425fe 100644
--- a/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/TerminalModule.kt
+++ b/app/src/main/java/com/ahmadkharfan/androidstudiolite/di/TerminalModule.kt
@@ -1,8 +1,8 @@
package com.ahmadkharfan.androidstudiolite.di
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxBootstrapInstaller
-import com.ahmadkharfan.androidstudiolite.core.linux.ProotEnvironment
-import com.ahmadkharfan.androidstudiolite.data.local.pty.PtyTerminalRepository
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxBootstrapInstaller
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.ProotEnvironment
+import com.ahmadkharfan.androidstudiolite.feature.terminal.pty.PtyTerminalRepository
import com.ahmadkharfan.androidstudiolite.feature.terminal.TerminalSessionManager
import org.koin.android.ext.koin.androidContext
import org.koin.core.module.Module
diff --git a/app/src/main/keepRules/rules.keep b/app/src/main/keepRules/rules.keep
index bacb5427..333c9df4 100644
--- a/app/src/main/keepRules/rules.keep
+++ b/app/src/main/keepRules/rules.keep
@@ -11,7 +11,7 @@
}
# --- JNI / native PTY ---
--keepclasseswithmembernames class com.ahmadkharfan.androidstudiolite.data.local.pty.NativePty {
+-keepclasseswithmembernames class com.ahmadkharfan.androidstudiolite.feature.terminal.pty.NativePty {
native ;
}
diff --git a/app/src/test/java/com/ahmadkharfan/androidstudiolite/NativePtyBindingTest.kt b/app/src/test/java/com/ahmadkharfan/androidstudiolite/NativePtyBindingTest.kt
new file mode 100644
index 00000000..878130af
--- /dev/null
+++ b/app/src/test/java/com/ahmadkharfan/androidstudiolite/NativePtyBindingTest.kt
@@ -0,0 +1,54 @@
+package com.ahmadkharfan.androidstudiolite
+
+import java.io.File
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+/**
+ * The PTY package name is written down in three places that must agree: the Kotlin `NativePty`
+ * object, the JNI function names in `asl_pty.c`, and the R8 keep rule.
+ *
+ * A mismatch does not fail the build. It fails at runtime with `UnsatisfiedLinkError` the first time
+ * a terminal is opened, or — worse — only in a release build if the keep rule stops matching and R8
+ * strips the native methods. This test ties the C and keep-rule ends to the same package so a future
+ * rename cannot quietly break the binding.
+ */
+class NativePtyBindingTest {
+
+ private val moduleRoot = File("").absoluteFile
+ private val cSource = File(moduleRoot, "src/main/cpp/asl_pty.c")
+ private val keepRules = File(moduleRoot, "src/main/keepRules/rules.keep")
+
+ private val nativeMethods = listOf("nativeForkPty", "nativeSetWinSize", "nativeWaitFor", "nativeDestroy")
+
+ @Test
+ fun `the keep rule and the jni symbols name the same class`() {
+ assertTrue("expected $cSource to exist", cSource.isFile)
+ assertTrue("expected $keepRules to exist", keepRules.isFile)
+
+ val keptClass = Regex("""-keepclasseswithmembernames class ([\w.]*NativePty)""")
+ .find(keepRules.readText())
+ ?.groupValues
+ ?.get(1)
+ assertTrue("no NativePty keep rule found in $keepRules", keptClass != null)
+
+ val expectedPrefix = "Java_" + keptClass!!.replace(".", "_") + "_"
+ val actualPrefixes = Regex("""Java_[\w]*_NativePty_""").findAll(cSource.readText())
+ .map { it.value }
+ .toSet()
+
+ assertEquals(
+ "JNI symbols in asl_pty.c must match the class named by the R8 keep rule",
+ setOf(expectedPrefix),
+ actualPrefixes,
+ )
+ }
+
+ @Test
+ fun `every declared native method has a jni implementation`() {
+ val c = cSource.readText()
+ val missing = nativeMethods.filterNot { c.contains("_NativePty_$it") }
+ assertEquals("native methods without a JNI implementation", emptyList(), missing)
+ }
+}
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/DataStoreGitAuthorStore.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/DataStoreGitAuthorStore.kt
similarity index 96%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/DataStoreGitAuthorStore.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/DataStoreGitAuthorStore.kt
index 7f03e7d2..8118b1b1 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/DataStoreGitAuthorStore.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/DataStoreGitAuthorStore.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/EncryptedGitCredentialStore.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/EncryptedGitCredentialStore.kt
similarity index 97%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/EncryptedGitCredentialStore.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/EncryptedGitCredentialStore.kt
index 4ddfecab..218d2df9 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/EncryptedGitCredentialStore.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/EncryptedGitCredentialStore.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import android.content.Context
import android.content.SharedPreferences
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinator.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinator.kt
similarity index 98%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinator.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinator.kt
index 5934d086..4ccef589 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinator.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinator.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.ActiveOperation
import com.ahmadkharfan.androidstudiolite.domain.model.GitOperationType
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipeline.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipeline.kt
similarity index 98%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipeline.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipeline.kt
index 1f986ff0..d2d35cdc 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipeline.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipeline.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactor.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactor.kt
similarity index 94%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactor.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactor.kt
index 8c24c6e0..a3a40e06 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactor.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactor.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import java.net.URI
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/InMemoryGitAuthorStore.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/InMemoryGitAuthorStore.kt
similarity index 91%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/InMemoryGitAuthorStore.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/InMemoryGitAuthorStore.kt
index 8423c4de..36d4c959 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/InMemoryGitAuthorStore.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/InMemoryGitAuthorStore.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitAuthorConfig
import com.ahmadkharfan.androidstudiolite.domain.repository.GitAuthorStore
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitBranchEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitBranchEngine.kt
similarity index 97%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitBranchEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitBranchEngine.kt
index 9c5a965d..06257916 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitBranchEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitBranchEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitBranch
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitDiffReader.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitDiffReader.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitDiffReader.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitDiffReader.kt
index bbc97d83..7eeee9c7 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitDiffReader.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitDiffReader.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitDiffHunk
import com.ahmadkharfan.androidstudiolite.domain.model.GitDiffKind
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitExceptionMapper.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitExceptionMapper.kt
similarity index 95%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitExceptionMapper.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitExceptionMapper.kt
index fc56df84..d7d2baba 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitExceptionMapper.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitExceptionMapper.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
import org.eclipse.jgit.api.errors.TransportException
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepository.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepository.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepository.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepository.kt
index ee3f36a3..462bcbdf 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepository.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepository.kt
@@ -1,4 +1,7 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
+
+import com.ahmadkharfan.androidstudiolite.data.local.DefaultWorkspaceWriteGate
+import com.ahmadkharfan.androidstudiolite.data.local.FileChangeBus
import com.ahmadkharfan.androidstudiolite.domain.model.CloneProgress
import com.ahmadkharfan.androidstudiolite.domain.model.CloneOptions
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitHistoryEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitHistoryEngine.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitHistoryEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitHistoryEngine.kt
index b386afad..246be364 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitHistoryEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitHistoryEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitBlameLine
import com.ahmadkharfan.androidstudiolite.domain.model.GitCommitChangeType
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIndexEditor.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIndexEditor.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIndexEditor.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIndexEditor.kt
index ecafab1f..8590e13a 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIndexEditor.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIndexEditor.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitDiffHunk
import com.ahmadkharfan.androidstudiolite.domain.model.GitDiffKind
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIntegrationEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIntegrationEngine.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIntegrationEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIntegrationEngine.kt
index 626f7ac3..10a1068b 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitIntegrationEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitIntegrationEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitConflictEntry
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitRemoteEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitRemoteEngine.kt
similarity index 97%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitRemoteEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitRemoteEngine.kt
index 49413c47..8b444de6 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitRemoteEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitRemoteEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitRemote
import com.ahmadkharfan.androidstudiolite.domain.model.GitUpstream
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStashEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStashEngine.kt
similarity index 95%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStashEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStashEngine.kt
index 51c8294a..14ae86e1 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStashEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStashEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitStash
import org.eclipse.jgit.api.Git
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputer.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputer.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputer.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputer.kt
index 2198a286..86c5862b 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputer.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputer.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitAheadBehind
import com.ahmadkharfan.androidstudiolite.domain.model.GitConflictInfo
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSubmoduleEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSubmoduleEngine.kt
similarity index 97%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSubmoduleEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSubmoduleEngine.kt
index 3ba89c97..8ddd497d 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSubmoduleEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSubmoduleEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitSubmodule
import com.ahmadkharfan.androidstudiolite.domain.model.GitSubmoduleStatus
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSyncEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSyncEngine.kt
similarity index 99%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSyncEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSyncEngine.kt
index d32a64f1..ee1e3c0b 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitSyncEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitSyncEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
import com.ahmadkharfan.androidstudiolite.domain.model.GitSyncResult
diff --git a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitTagEngine.kt b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitTagEngine.kt
similarity index 95%
rename from data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitTagEngine.kt
rename to data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitTagEngine.kt
index 59c5d40f..5bbda372 100644
--- a/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/JGitTagEngine.kt
+++ b/data/git/src/main/java/com/ahmadkharfan/androidstudiolite/data/git/JGitTagEngine.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitAuthorConfig
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinatorTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinatorTest.kt
similarity index 98%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinatorTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinatorTest.kt
index efcbd917..159e04ef 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitOperationCoordinatorTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitOperationCoordinatorTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitOperationType
import java.io.File
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipelineTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipelineTest.kt
similarity index 96%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipelineTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipelineTest.kt
index 376bc07f..7ba30dba 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitRefreshPipelineTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitRefreshPipelineTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlin.time.Duration.Companion.milliseconds
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactorTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactorTest.kt
similarity index 96%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactorTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactorTest.kt
index 5936b283..55319887 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/GitUrlRedactorTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/GitUrlRedactorTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
import org.eclipse.jgit.api.errors.TransportException
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitForceWithLeaseTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitForceWithLeaseTest.kt
similarity index 98%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitForceWithLeaseTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitForceWithLeaseTest.kt
index 19ce0356..2f3e7a91 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitForceWithLeaseTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitForceWithLeaseTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.GitException
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryOpsTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryOpsTest.kt
similarity index 99%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryOpsTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryOpsTest.kt
index 2107b5e7..72d0445b 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryOpsTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryOpsTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.GitIntegrationStatus
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositorySyncTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositorySyncTest.kt
similarity index 98%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositorySyncTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositorySyncTest.kt
index 5c253d9e..b5e83be0 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositorySyncTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositorySyncTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.PullMode
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryTest.kt
similarity index 99%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryTest.kt
index eae6e7db..94aad50f 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitGitRepositoryTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitGitRepositoryTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.CloneOptions
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputerTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputerTest.kt
similarity index 99%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputerTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputerTest.kt
index 1bbec6e2..b5e54423 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/JGitStatusComputerTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/JGitStatusComputerTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.GitConflictStage
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/PartialStagingTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/PartialStagingTest.kt
similarity index 99%
rename from data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/PartialStagingTest.kt
rename to data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/PartialStagingTest.kt
index b502f030..9a857be6 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/PartialStagingTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/data/git/PartialStagingTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.data.git
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.GitDiffHunk
diff --git a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/domain/usecase/CloneProjectUseCaseTest.kt b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/domain/usecase/CloneProjectUseCaseTest.kt
index fd451f49..4f65f11e 100644
--- a/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/domain/usecase/CloneProjectUseCaseTest.kt
+++ b/data/git/src/test/java/com/ahmadkharfan/androidstudiolite/domain/usecase/CloneProjectUseCaseTest.kt
@@ -5,7 +5,7 @@ import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
import com.ahmadkharfan.androidstudiolite.data.local.AndroidProjectRepository
import com.ahmadkharfan.androidstudiolite.data.local.FileChangeBus
-import com.ahmadkharfan.androidstudiolite.data.local.JGitGitRepository
+import com.ahmadkharfan.androidstudiolite.data.git.JGitGitRepository
import com.ahmadkharfan.androidstudiolite.domain.model.CloneOptions
import com.ahmadkharfan.androidstudiolite.domain.model.GitCredentials
import com.ahmadkharfan.androidstudiolite.domain.model.Project
diff --git a/feature/buildrun/src/main/AndroidManifest.xml b/feature/buildrun/src/main/AndroidManifest.xml
index 549d714c..6968bd37 100644
--- a/feature/buildrun/src/main/AndroidManifest.xml
+++ b/feature/buildrun/src/main/AndroidManifest.xml
@@ -3,4 +3,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallRunner.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallRunner.kt
index 1629eec3..7c0aa976 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallRunner.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallRunner.kt
@@ -1,7 +1,7 @@
package com.ahmadkharfan.androidstudiolite.feature.buildrun
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.InstallEvent
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.UninstallEvent
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.InstallEvent
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.UninstallEvent
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.GradleProjectInspector
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.BuildEvent
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.BuildRequest
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildNotifier.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildNotifier.kt
index bb230915..65487b15 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildNotifier.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildNotifier.kt
@@ -12,7 +12,7 @@ import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.InstallConfirmActivity
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.InstallConfirmActivity
import java.util.Locale
class BuildNotifier(private val context: Context) {
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildRunCoordinator.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildRunCoordinator.kt
index c2dd7ae9..772b6efc 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildRunCoordinator.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildRunCoordinator.kt
@@ -1,8 +1,8 @@
package com.ahmadkharfan.androidstudiolite.feature.buildrun
import android.content.Context
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.ApkInstaller
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.UninstallEvent
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.ApkInstaller
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.UninstallEvent
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.GradleProjectInspector
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.ActiveBuild
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.ActiveBuildRepository
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/ApkInstaller.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/ApkInstaller.kt
similarity index 99%
rename from feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/ApkInstaller.kt
rename to feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/ApkInstaller.kt
index ca5b8340..41a51fad 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/ApkInstaller.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/ApkInstaller.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import kotlin.time.Duration.Companion.milliseconds
import android.app.PendingIntent
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallConfirmActivity.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallConfirmActivity.kt
similarity index 96%
rename from feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallConfirmActivity.kt
rename to feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallConfirmActivity.kt
index 25f65337..d88f0693 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallConfirmActivity.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallConfirmActivity.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import android.app.Activity
import android.content.Intent
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallModels.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallModels.kt
similarity index 97%
rename from feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallModels.kt
rename to feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallModels.kt
index 2bd7710a..cfc024e0 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallModels.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallModels.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import android.content.pm.PackageInstaller
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptNotifier.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptNotifier.kt
similarity index 98%
rename from feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptNotifier.kt
rename to feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptNotifier.kt
index efbbbb26..be8f35fb 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptNotifier.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptNotifier.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import android.Manifest
import android.annotation.SuppressLint
diff --git a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusReceiver.kt b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusReceiver.kt
similarity index 98%
rename from feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusReceiver.kt
rename to feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusReceiver.kt
index 109078e7..54e55f2c 100644
--- a/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusReceiver.kt
+++ b/feature/buildrun/src/main/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusReceiver.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import android.app.ActivityManager
import android.content.BroadcastReceiver
diff --git a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallOrchestrationTest.kt b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallOrchestrationTest.kt
index 28b8ba8a..b9aea834 100644
--- a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallOrchestrationTest.kt
+++ b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/BuildInstallOrchestrationTest.kt
@@ -1,7 +1,7 @@
package com.ahmadkharfan.androidstudiolite.feature.buildrun
import android.content.ContextWrapper
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.InstallEvent
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.InstallEvent
import com.ahmadkharfan.androidstudiolite.data.gradle.GradleProjectReader
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.ActiveBuild
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.ActiveBuildRepository
diff --git a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptClaimRegistryTest.kt b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptClaimRegistryTest.kt
similarity index 90%
rename from feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptClaimRegistryTest.kt
rename to feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptClaimRegistryTest.kt
index 758b2e90..e568f320 100644
--- a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallPromptClaimRegistryTest.kt
+++ b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallPromptClaimRegistryTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
diff --git a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusMapperTest.kt b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusMapperTest.kt
similarity index 96%
rename from feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusMapperTest.kt
rename to feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusMapperTest.kt
index d6ce1e4e..5491c271 100644
--- a/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/data/buildsystem/install/InstallStatusMapperTest.kt
+++ b/feature/buildrun/src/test/java/com/ahmadkharfan/androidstudiolite/feature/buildrun/install/InstallStatusMapperTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.buildsystem.install
+package com.ahmadkharfan.androidstudiolite.feature.buildrun.install
import android.content.pm.PackageInstaller
import org.junit.Assert.assertEquals
diff --git a/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorRootInvalidationTest.kt b/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorRootInvalidationTest.kt
index 1cee8ef8..42e2999b 100644
--- a/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorRootInvalidationTest.kt
+++ b/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorRootInvalidationTest.kt
@@ -3,7 +3,7 @@ package com.ahmadkharfan.androidstudiolite.feature.editor
import kotlin.time.Duration.Companion.seconds
import androidx.lifecycle.viewModelScope
import android.content.ContextWrapper
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.ApkInstaller
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.ApkInstaller
import com.ahmadkharfan.androidstudiolite.data.gradle.GradleProjectReader
import com.ahmadkharfan.androidstudiolite.data.remote.InMemoryActiveBuildStore
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.BuildEvent
diff --git a/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorTabLifecycleTest.kt b/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorTabLifecycleTest.kt
index 111f8eba..b6bf163e 100644
--- a/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorTabLifecycleTest.kt
+++ b/feature/editor/src/test/java/com/ahmadkharfan/androidstudiolite/feature/editor/EditorTabLifecycleTest.kt
@@ -3,7 +3,7 @@ package com.ahmadkharfan.androidstudiolite.feature.editor
import kotlin.time.Duration.Companion.seconds
import androidx.lifecycle.viewModelScope
import android.content.ContextWrapper
-import com.ahmadkharfan.androidstudiolite.data.buildsystem.install.ApkInstaller
+import com.ahmadkharfan.androidstudiolite.feature.buildrun.install.ApkInstaller
import com.ahmadkharfan.androidstudiolite.data.gradle.GradleProjectReader
import com.ahmadkharfan.androidstudiolite.data.remote.InMemoryActiveBuildStore
import com.ahmadkharfan.androidstudiolite.domain.buildsystem.BuildEvent
diff --git a/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/data/onboarding/AndroidOnboardingRepository.kt b/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/data/AndroidOnboardingRepository.kt
similarity index 97%
rename from feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/data/onboarding/AndroidOnboardingRepository.kt
rename to feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/data/AndroidOnboardingRepository.kt
index a4887455..c36c51f8 100644
--- a/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/data/onboarding/AndroidOnboardingRepository.kt
+++ b/feature/onboarding/src/main/java/com/ahmadkharfan/androidstudiolite/feature/onboarding/data/AndroidOnboardingRepository.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.onboarding
+package com.ahmadkharfan.androidstudiolite.feature.onboarding.data
import android.content.Context
import androidx.datastore.preferences.core.booleanPreferencesKey
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/EditorEmbeddedTerminal.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/EditorEmbeddedTerminal.kt
index 34b3c01b..e402ff7d 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/EditorEmbeddedTerminal.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/EditorEmbeddedTerminal.kt
@@ -23,9 +23,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxBootstrapInstaller
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxInstallState
-import com.ahmadkharfan.androidstudiolite.core.linux.ProotEnvironment
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxBootstrapInstaller
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxInstallState
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.ProotEnvironment
import com.ahmadkharfan.androidstudiolite.designsystem.theme.AslCode
import com.ahmadkharfan.androidstudiolite.designsystem.theme.AslShape
import com.ahmadkharfan.androidstudiolite.designsystem.theme.AslTheme
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepository.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepository.kt
similarity index 98%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepository.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepository.kt
index ae5f2905..5153dde7 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepository.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepository.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.feature.terminal
import com.ahmadkharfan.androidstudiolite.domain.model.TerminalEvent
import com.ahmadkharfan.androidstudiolite.domain.model.TerminalLineKind
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalLinuxStatus.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalLinuxStatus.kt
index 332485aa..83368b80 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalLinuxStatus.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalLinuxStatus.kt
@@ -1,7 +1,7 @@
package com.ahmadkharfan.androidstudiolite.feature.terminal
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxInstallState
-import com.ahmadkharfan.androidstudiolite.core.linux.ProotEnvironment
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxInstallState
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.ProotEnvironment
fun LinuxInstallState.toLinuxStatus(proot: ProotEnvironment): LinuxStatus {
val onDisk = proot.isInstalled()
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalViewModel.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalViewModel.kt
index 760fc048..fe43db2c 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalViewModel.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/TerminalViewModel.kt
@@ -2,9 +2,9 @@ package com.ahmadkharfan.androidstudiolite.feature.terminal
import androidx.lifecycle.viewModelScope
import com.ahmadkharfan.androidstudiolite.core.BaseViewModel
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxBootstrapInstaller
-import com.ahmadkharfan.androidstudiolite.core.linux.LinuxInstallState
-import com.ahmadkharfan.androidstudiolite.core.linux.ProotEnvironment
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxBootstrapInstaller
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.LinuxInstallState
+import com.ahmadkharfan.androidstudiolite.feature.terminal.linux.ProotEnvironment
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapInstaller.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapInstaller.kt
similarity index 99%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapInstaller.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapInstaller.kt
index 4112e020..c4ff7272 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapInstaller.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapInstaller.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.core.linux
+package com.ahmadkharfan.androidstudiolite.feature.terminal.linux
import android.system.Os
import kotlinx.coroutines.CoroutineDispatcher
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapPackages.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapPackages.kt
similarity index 82%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapPackages.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapPackages.kt
index 737f4bae..b921f75a 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxBootstrapPackages.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxBootstrapPackages.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.core.linux
+package com.ahmadkharfan.androidstudiolite.feature.terminal.linux
object LinuxBootstrapPackages {
val packages: List = listOf(
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxDistro.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxDistro.kt
similarity index 94%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxDistro.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxDistro.kt
index 6cca6a29..236a1e01 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/LinuxDistro.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/LinuxDistro.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.core.linux
+package com.ahmadkharfan.androidstudiolite.feature.terminal.linux
import android.os.Build
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/ProotEnvironment.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/ProotEnvironment.kt
similarity index 99%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/ProotEnvironment.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/ProotEnvironment.kt
index 6375bfb8..85a48a4a 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/core/linux/ProotEnvironment.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/linux/ProotEnvironment.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.core.linux
+package com.ahmadkharfan.androidstudiolite.feature.terminal.linux
import android.content.Context
import android.system.Os
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/NativePty.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/NativePty.kt
similarity index 88%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/NativePty.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/NativePty.kt
index a7981d4b..8dd3f3b8 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/NativePty.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/NativePty.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local.pty
+package com.ahmadkharfan.androidstudiolite.feature.terminal.pty
internal object NativePty {
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyProcess.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyProcess.kt
similarity index 96%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyProcess.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyProcess.kt
index 99432961..ed05947a 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyProcess.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyProcess.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local.pty
+package com.ahmadkharfan.androidstudiolite.feature.terminal.pty
import android.os.ParcelFileDescriptor
import java.io.File
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtySession.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtySession.kt
similarity index 94%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtySession.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtySession.kt
index b6024d85..917412d7 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtySession.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtySession.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local.pty
+package com.ahmadkharfan.androidstudiolite.feature.terminal.pty
import java.io.File
import java.io.InputStream
diff --git a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepository.kt b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepository.kt
similarity index 98%
rename from feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepository.kt
rename to feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepository.kt
index 12514563..a8c962c3 100644
--- a/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepository.kt
+++ b/feature/terminal/src/main/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepository.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local.pty
+package com.ahmadkharfan.androidstudiolite.feature.terminal.pty
import com.ahmadkharfan.androidstudiolite.domain.model.TerminalEvent
import com.ahmadkharfan.androidstudiolite.domain.repository.TerminalRepository
diff --git a/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepositoryTest.kt b/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepositoryTest.kt
similarity index 98%
rename from feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepositoryTest.kt
rename to feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepositoryTest.kt
index e6260020..7f5f668c 100644
--- a/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/ShellTerminalRepositoryTest.kt
+++ b/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/ShellTerminalRepositoryTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local
+package com.ahmadkharfan.androidstudiolite.feature.terminal
import kotlin.time.Duration.Companion.seconds
import kotlin.time.Duration.Companion.milliseconds
diff --git a/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepositoryTest.kt b/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepositoryTest.kt
similarity index 98%
rename from feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepositoryTest.kt
rename to feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepositoryTest.kt
index 76bc2e59..fb98cf16 100644
--- a/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/data/local/pty/PtyTerminalRepositoryTest.kt
+++ b/feature/terminal/src/test/java/com/ahmadkharfan/androidstudiolite/feature/terminal/pty/PtyTerminalRepositoryTest.kt
@@ -1,4 +1,4 @@
-package com.ahmadkharfan.androidstudiolite.data.local.pty
+package com.ahmadkharfan.androidstudiolite.feature.terminal.pty
import com.ahmadkharfan.androidstudiolite.domain.model.TerminalEvent
import kotlinx.coroutines.Dispatchers