@lazyingart/agintiflow 0.20.93 → 0.20.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -155,7 +155,7 @@ aginti --resume <session-id> \
|
|
|
155
155
|
"Take a fresh screenshot of the running app in the emulator, save it with a durable filename in this project, and keep git status clean."
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
Permission behavior is intentionally consistent: writes inside the current project are allowed through file tools, network/setup runs are normal in approved Docker workspace mode, and outside-project or trusted-host actions stop with a clear blocker plus a suggested rerun command. See [runtime modes and autonomy](docs/runtime-modes-and-autonomy.md) for the full contract.
|
|
158
|
+
Permission behavior is intentionally consistent: writes inside the current project are allowed through file tools, workspace-local toolchain builds/probes can run when their command is narrowly classified, network/setup runs are normal in approved Docker workspace mode, and outside-project or trusted-host actions stop with a clear blocker plus a suggested rerun command. See [runtime modes and autonomy](docs/runtime-modes-and-autonomy.md) for the full contract.
|
|
159
159
|
|
|
160
160
|
Tmux follows the same rule. In Docker sandbox mode, `tmux_start_session` and `tmux_send_keys` are durable host tools, but their commands must stay workspace-bound. In host mode, tmux startup/send command text follows the same host shell policy as `run_command`; broad host shell work needs explicit `--allow-destructive`. Use `--sandbox-mode host --allow-destructive` only when a tmux task really needs trusted whole-host execution.
|
|
161
161
|
|
|
@@ -167,7 +167,7 @@ Use these when you want explicit control instead of the default interactive poli
|
|
|
167
167
|
| --- | --- | --- |
|
|
168
168
|
| Strict inspection | `aginti --sandbox-mode docker-readonly --package-install-policy block --allow-shell --no-file-tools --no-web-search "inspect this project without edits"` | Enforced read-only project inspection through shell commands such as `ls`, `rg`, `cat`, and test commands that do not write. No file-tool writes, web calls, workspace writes, or installs. |
|
|
169
169
|
| Full write in current folder | `aginti --sandbox-mode docker-workspace --package-install-policy allow --approve-package-installs --allow-shell --allow-file-tools "build and test this project"` | Read/write inside the current project folder, run network/setup commands in Docker, keep host safer. |
|
|
170
|
-
| Full host computer access | `aginti --sandbox-mode host --package-install-policy allow --approve-package-installs --allow-shell --allow-file-tools --allow-destructive "perform the trusted host maintenance task"` | Direct host shell and destructive actions. Use only when you trust the task and want whole-host access. |
|
|
170
|
+
| Full host computer access | `aginti --sandbox-mode host --package-install-policy allow --approve-package-installs --allow-shell --allow-file-tools --allow-destructive "perform the trusted host maintenance task"` | Direct host shell and destructive actions. Use only when you trust the task and want whole-host access. Android emulator/device work often needs this because the SDK and emulator live on the host. |
|
|
171
171
|
|
|
172
172
|
For resume:
|
|
173
173
|
|
|
@@ -13,7 +13,7 @@ The failed task was expected under the current Docker design, but the agent shou
|
|
|
13
13
|
|
|
14
14
|
The fix is guidance plus guardrails: raw `tmux` shell commands are blocked inside Docker `run_command`, and the model is told to use host tmux tools for durable sessions.
|
|
15
15
|
|
|
16
|
-
Important boundary: host tmux tools are durable, but they are not a permission escape hatch. In `docker-readonly` and `docker-workspace` modes, `tmux_start_session` and `tmux_send_keys` are still workspace-bound. Startup commands and sent shell text must use relative paths under the project, not absolute host paths outside the project. In `host` mode, tmux startup/send command text follows the same host shell policy as `run_command`, so broad host shell work requires `--allow-destructive`.
|
|
16
|
+
Important boundary: host tmux tools are durable, but they are not a permission escape hatch. In `docker-readonly` and `docker-workspace` modes, `tmux_start_session` and `tmux_send_keys` are still workspace-bound. Startup commands and sent shell text must use relative paths under the project, not absolute host paths outside the project. In `host` mode, tmux startup/send command text follows the same host shell policy as `run_command`, so broad host shell work requires `--allow-destructive`. Narrow workspace-local probes/builds can run without full-host trust, but if a task really needs `/home/...`, `/etc/...`, an emulator outside the project, or whole-host maintenance, rerun explicitly with `--sandbox-mode host --allow-destructive`.
|
|
17
17
|
|
|
18
18
|
## Execution Modes
|
|
19
19
|
|
|
@@ -51,11 +51,13 @@ The runtime must be consistent when an action is not permitted. A blocked action
|
|
|
51
51
|
Current contract:
|
|
52
52
|
|
|
53
53
|
- Workspace file tools may read and write inside the configured project folder when file tools are enabled.
|
|
54
|
+
- Narrow workspace-local shell actions such as safe probes, Gradle/TeX builds, and `chmod +x` on a project script may run when the command policy can classify them precisely.
|
|
54
55
|
- Workspace writes outside that folder, secret paths, `.git` internals, and dependency folders such as `node_modules` are blocked.
|
|
55
56
|
- `git clone`, `git fetch`, `git pull --ff-only`, `git push`, `curl`, and `wget` are classified as network operations.
|
|
56
57
|
- Network/setup commands are allowed in `docker-workspace` only when package installs are approved.
|
|
57
58
|
- Host `sudo` and host OS package installs are not automatic. The agent should ask the user to run a manual command or switch to a safer Docker setup.
|
|
58
59
|
- Destructive host shell/git operations need explicit trusted host mode.
|
|
60
|
+
- Android SDK/emulator work commonly needs host mode because `adb`, emulator images, and device state live outside Docker; use trusted host mode for install/launch/screenshot steps when the user approves that host access.
|
|
59
61
|
|
|
60
62
|
When a tool is blocked, the tool result includes `permissionAdvice` with three choices: refuse/stop, approve a safer rerun, or switch to a trusted host run. The model prompt requires the agent to present that blocker and avoid retrying variants until the user approves a path.
|
|
61
63
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lazyingart/agintiflow",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.94",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Low-cost, project-aware Web and CLI agents with DeepSeek/Venice/OpenAI routing, visible tool calls, durable sessions, scouts, AAPS, SCS, and guarded local execution.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -270,6 +270,14 @@ try {
|
|
|
270
270
|
...dockerWorkspacePolicy,
|
|
271
271
|
packageInstallPolicy: "block",
|
|
272
272
|
};
|
|
273
|
+
const hostWorkspacePolicy = {
|
|
274
|
+
allowShellTool: true,
|
|
275
|
+
useDockerSandbox: false,
|
|
276
|
+
sandboxMode: "host",
|
|
277
|
+
packageInstallPolicy: "allow",
|
|
278
|
+
allowDestructive: false,
|
|
279
|
+
commandCwd: workspace,
|
|
280
|
+
};
|
|
273
281
|
const readonlyProbePolicy = evaluateCommandPolicy(
|
|
274
282
|
'which pdflatex 2>&1; which latexmk 2>&1; echo "---"; find /workspace -name \'*.tex\' -maxdepth 3 2>/dev/null; echo "exit: $?"',
|
|
275
283
|
dockerWorkspaceNoInstallsPolicy
|
|
@@ -326,6 +334,21 @@ try {
|
|
|
326
334
|
assert(safeChmodAndRunPolicy.allowed, "safe workspace chmod + script run sequence should be allowed in docker-workspace allow mode");
|
|
327
335
|
const unsafeChmodPolicy = evaluateCommandPolicy("chmod +x /etc/passwd", dockerWorkspacePolicy);
|
|
328
336
|
assert(!unsafeChmodPolicy.allowed, "chmod outside the workspace should be blocked");
|
|
337
|
+
const hostWorkspaceChmodPolicy = evaluateCommandPolicy("chmod +x android-app/gradlew && echo \"CHMOD_OK\"", hostWorkspacePolicy);
|
|
338
|
+
assert(hostWorkspaceChmodPolicy.allowed, "host mode should allow workspace-local chmod without full-host destructive access");
|
|
339
|
+
assert(
|
|
340
|
+
hostWorkspaceChmodPolicy.category === "permission-change",
|
|
341
|
+
"host workspace chmod sequence should remain categorized as permission-change"
|
|
342
|
+
);
|
|
343
|
+
const androidReadonlyProbePolicy = evaluateCommandPolicy(
|
|
344
|
+
'test -x /usr/bin/gradle && echo "GRADLE_OK" ; test -x /usr/bin/java && /usr/bin/java -version 2>&1 | head -1; adb devices; emulator -list-avds; find android-app -type f | sort',
|
|
345
|
+
hostWorkspacePolicy
|
|
346
|
+
);
|
|
347
|
+
assert(androidReadonlyProbePolicy.allowed, "Android host read-only probes should not require full-host destructive access");
|
|
348
|
+
assert(androidReadonlyProbePolicy.category === "read-only", "Android host probes should remain read-only");
|
|
349
|
+
const androidGradleBuildPolicy = evaluateCommandPolicy("cd android-app && ./gradlew :app:assembleDebug", hostWorkspacePolicy);
|
|
350
|
+
assert(androidGradleBuildPolicy.allowed, "workspace-local Gradle Android build should be allowed in host workspace mode");
|
|
351
|
+
assert(androidGradleBuildPolicy.category === "toolchain", "workspace-local Gradle Android build should be toolchain");
|
|
329
352
|
const cdWorkspacePolicy = evaluateCommandPolicy("cd /workspace && git status --short 2>&1 | head -20", dockerWorkspacePolicy);
|
|
330
353
|
assert(cdWorkspacePolicy.allowed, "cd /workspace should be allowed in docker-workspace mode");
|
|
331
354
|
const gitCleanDryRunPolicy = evaluateCommandPolicy("git clean -nd reports", dockerWorkspacePolicy);
|
|
@@ -793,6 +816,9 @@ try {
|
|
|
793
816
|
"command_policy_git_rebase_still_guarded",
|
|
794
817
|
"command_policy_git_clone_network",
|
|
795
818
|
"command_policy_safe_chmod_sequence",
|
|
819
|
+
"command_policy_host_workspace_chmod",
|
|
820
|
+
"command_policy_android_host_probes",
|
|
821
|
+
"command_policy_android_gradle_build",
|
|
796
822
|
"command_policy_cd_workspace",
|
|
797
823
|
"command_policy_git_clean_dry_run",
|
|
798
824
|
"permission_recovery_advice",
|
package/skills/android/SKILL.md
CHANGED
|
@@ -22,12 +22,13 @@ tools:
|
|
|
22
22
|
|
|
23
23
|
1. Inspect before editing: `git status --short`, project tree, Gradle/settings files, AndroidManifest, package names, modules, Java/Kotlin versions, `ANDROID_HOME`/`ANDROID_SDK_ROOT`, likely SDK folders, `adb devices`, and emulator/AVD availability.
|
|
24
24
|
2. Do not use host `sudo`, `apt`, `dnf`, `yum`, `brew`, `winget`, or global host installs for Android app work. These can hang on password prompts or mutate the user's machine. Prefer existing Android SDK tools, project-local Gradle wrapper setup, user-writable caches, or a clear setup report with the exact manual command.
|
|
25
|
-
3.
|
|
26
|
-
4.
|
|
27
|
-
5.
|
|
28
|
-
6.
|
|
29
|
-
7.
|
|
30
|
-
8.
|
|
25
|
+
3. Android SDK and emulator tooling usually lives on the host, not inside Docker. If a permission block appears while using a host SDK/emulator, prefer the exact trusted host resume command from `permissionAdvice.trustedHostCommand` over a Docker rerun unless the SDK is explicitly mounted in Docker.
|
|
26
|
+
4. If a Gradle wrapper is needed, create `gradle/wrapper/` before downloading files. Prefer a valid project-local wrapper or an already-installed Gradle. Do not loop on the same failed install/download.
|
|
27
|
+
5. Patch source-set-aware files only: manifests, Gradle scripts, Kotlin/Java sources, XML resources, and project docs. Keep generated build outputs out of patches and commits.
|
|
28
|
+
6. Build with the narrowest useful task first, usually `./gradlew :app:assembleDebug` or `./gradlew assembleDebug`. Repair build failures from the actual error text.
|
|
29
|
+
7. Install and launch on an available device/emulator with `adb install` and `adb shell am start`. Verify with `adb shell pidof`, `adb logcat -d`, `adb shell screencap`, or similar evidence when available.
|
|
30
|
+
8. Save screenshots and APK references in durable workspace paths with descriptive names when the user did not specify paths, for example `artifacts/screenshots/<app>-<timestamp>.png` and `app/build/outputs/apk/debug/app-debug.apk`. Do not rely only on a temporary screenshot that is deleted after canvas preview.
|
|
31
|
+
9. Commit only after build/install/launch verification, with a clear message. Before final summary, run `git status --short`; leave source changes committed and generated/session artifacts ignored or explicitly reported. If no device/emulator exists, finish with a concrete external blocker and the generated APK path.
|
|
31
32
|
|
|
32
33
|
## Missing Tooling
|
|
33
34
|
|
package/src/command-policy.js
CHANGED
|
@@ -15,6 +15,7 @@ const READ_ONLY_PATTERNS = [
|
|
|
15
15
|
/^cat(?:\s+[-\w./~*]+)+$/,
|
|
16
16
|
/^head(?:\s+.+)?$/,
|
|
17
17
|
/^tail(?:\s+.+)?$/,
|
|
18
|
+
/^sort(?:\s+[-\w./~*]+)*$/,
|
|
18
19
|
/^wc(?:\s+.+)?$/,
|
|
19
20
|
/^sed\s+-n\s+['"0-9,:p\s-]+\s+[-\w./~*]+$/,
|
|
20
21
|
/^git\s+(status|branch|log|show|diff(?:\s+--stat)?|remote\s+-v)(?:\s+.+)?$/,
|
|
@@ -23,6 +24,11 @@ const READ_ONLY_PATTERNS = [
|
|
|
23
24
|
/^python(?:3)?\s+--version$/,
|
|
24
25
|
/^pip(?:3)?\s+--version$/,
|
|
25
26
|
/^conda\s+--version$/,
|
|
27
|
+
/^(?:[-/\w.]+\/)?java\s+-version$/,
|
|
28
|
+
/^(?:[-/\w.]+\/)?gradle\s+--version$/,
|
|
29
|
+
/^(?:[-/\w.]+\/)?adb\s+devices(?:\s+-l)?$/,
|
|
30
|
+
/^(?:[-/\w.]+\/)?emulator\s+-list-avds$/,
|
|
31
|
+
/^(?:[-/\w.]+\/)?sdkmanager\s+--list(?:\s+[-\w./:=]+)*$/,
|
|
26
32
|
/^(?:pdflatex|latexmk)\s+--version$/,
|
|
27
33
|
/^test\s+-[efdx]\s+[-\w./~]+$/,
|
|
28
34
|
/^true$/,
|
|
@@ -100,6 +106,7 @@ const UNSAFE_GIT_PATTERNS = [
|
|
|
100
106
|
|
|
101
107
|
const TOOLCHAIN_PATTERNS = [
|
|
102
108
|
/^python(?:3)?\s+[-\w./]+\.py(?:\s+[-\w./:=]+)*$/,
|
|
109
|
+
/^\.\/gradlew\s+(?:(?::[-\w]+:)?(?:assembleDebug|assembleRelease|bundleDebug|bundleRelease|compileDebugKotlin|compileReleaseKotlin|testDebugUnitTest|lintDebug|lint|check|build))(?:\s+[-\w./:=]+)*$/,
|
|
103
110
|
/^latexmk\s+(?=[-\w./=\s]*-pdf\b)(?:(?:-cd|-pdf|-interaction=nonstopmode|-halt-on-error|-output-directory=[-\w./]+)\s+)+[-\w./]+\.tex$/,
|
|
104
111
|
/^pdflatex\s+(?:(?:-interaction=nonstopmode|-halt-on-error|-output-directory=[-\w./]+|-jobname\s+[-\w./]+)\s+)*[-\w./]+\.tex$/,
|
|
105
112
|
];
|
|
@@ -651,7 +658,7 @@ export function evaluateCommandPolicy(command, config) {
|
|
|
651
658
|
};
|
|
652
659
|
}
|
|
653
660
|
|
|
654
|
-
if (classification.category === "permission-change" && !trustedDockerShell && !trustedHostShell) {
|
|
661
|
+
if (classification.category === "permission-change" && sandboxMode !== "host" && !trustedDockerShell && !trustedHostShell) {
|
|
655
662
|
return {
|
|
656
663
|
allowed: false,
|
|
657
664
|
...classification,
|
package/src/task-profiles.js
CHANGED
|
@@ -227,7 +227,7 @@ export const TASK_PROFILES = {
|
|
|
227
227
|
id: "android",
|
|
228
228
|
label: "Android",
|
|
229
229
|
prompt:
|
|
230
|
-
"Bias toward end-to-end Android app delivery while still handling normal project work. Inspect git status, existing Gradle files, AndroidManifest, SDK paths, Java/Kotlin versions, adb devices, and emulator/AVD availability before editing. Do not use host sudo, apt, dnf, yum, brew, winget, or global host installs during Android tasks; prefer the existing Android SDK, project-local Gradle wrapper, user-writable caches, or a clear setup report. Create missing wrapper directories before downloads, avoid repeated failing install attempts, build with focused Gradle tasks, install and launch with adb when a device/emulator exists, verify with am/logcat/screencap when possible, save screenshots under durable workspace paths, and commit the finished app only after checks.",
|
|
230
|
+
"Bias toward end-to-end Android app delivery while still handling normal project work. Inspect git status, existing Gradle files, AndroidManifest, SDK paths, Java/Kotlin versions, adb devices, and emulator/AVD availability before editing. Do not use host sudo, apt, dnf, yum, brew, winget, or global host installs during Android tasks; prefer the existing Android SDK, project-local Gradle wrapper, user-writable caches, or a clear setup report. Android SDK/emulator work usually needs host mode because device tools live outside Docker; if host policy blocks a required project-local build/probe, present the exact trusted host resume command from permissionAdvice rather than suggesting Docker as the primary route. Create missing wrapper directories before downloads, avoid repeated failing install attempts, build with focused Gradle tasks, install and launch with adb when a device/emulator exists, verify with am/logcat/screencap when possible, save screenshots under durable workspace paths, and commit the finished app only after checks.",
|
|
231
231
|
tools: ["inspect_project", "search_files", "read_file", "apply_patch", "shell", "sandbox", "canvas"],
|
|
232
232
|
},
|
|
233
233
|
website: {
|