taphound 0.2.0-dev.1 → 0.2.0-dev.11
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 +49 -149
- package/README.zh-CN.md +47 -147
- package/assets/skills/taphound-case-suite/SKILL.md +363 -0
- package/assets/skills/taphound-case-suite/schemas/base-flow-record.schema.json +22 -0
- package/assets/skills/taphound-case-suite/schemas/case-catalog.schema.json +26 -0
- package/assets/skills/taphound-case-suite/schemas/case-ledger.schema.json +158 -0
- package/assets/skills/taphound-case-suite/schemas/suite-input.schema.json +41 -0
- package/assets/skills/taphound-case-suite/schemas/transition.schema.json +61 -0
- package/assets/skills/taphound-case-suite/scripts/ledger.mjs +1207 -0
- package/assets/skills/taphound-case-suite/templates/base-flow-record.example.json +20 -0
- package/assets/skills/taphound-case-suite/templates/suite-input.example.json +27 -0
- package/assets/skills/taphound-case-suite/templates/transition.example.json +8 -0
- package/assets/skills/taphound-flash/SKILL.md +115 -0
- package/assets/skills/taphound-flash/scripts/flash.mjs +585 -0
- package/assets/skills/taphound-flash/templates/flash-plan.example.json +15 -0
- package/assets/skills/taphound-journey-brief-author/CONTEXT-GUIDE.md +471 -0
- package/assets/skills/taphound-journey-brief-author/SKILL.md +494 -0
- package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.md +96 -0
- package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.zh-CN.md +80 -0
- package/assets/skills/taphound-journey-brief-author/prompts/context-analyze-project.md +309 -0
- package/assets/skills/taphound-journey-brief-author/schemas/context-refresh-result.json +123 -0
- package/assets/skills/taphound-journey-brief-author/schemas/project-context-module.json +192 -0
- package/assets/skills/taphound-journey-brief-author/schemas/project-context.json +152 -0
- package/assets/skills/taphound-journey-brief-author/templates/project-context-module.example.json +58 -0
- package/assets/skills/taphound-journey-brief-author/templates/project-context.example.json +51 -0
- package/assets/skills/taphound-journey-brief-author/templates/taphound-journey-brief.template.md +63 -0
- package/assets/skills/taphound-journey-generator/SKILL.md +500 -0
- package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/prompts/check-completion.md +3 -0
- package/assets/skills/taphound-journey-generator/prompts/consume-journey-brief.md +52 -0
- package/assets/skills/taphound-journey-generator/prompts/generate-step.md +211 -0
- package/assets/skills/taphound-journey-generator/prompts/select-flow.md +91 -0
- package/assets/skills/taphound-journey-generator/references/bridge.md +35 -0
- package/assets/skills/taphound-journey-generator/references/mid-session.md +44 -0
- package/assets/skills/taphound-journey-generator/schemas/external-flow.json +37 -0
- package/assets/skills/taphound-journey-generator/schemas/flow.json +28 -0
- package/assets/skills/taphound-journey-generator/schemas/journey-source.json +25 -0
- package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/observe-output.json +13 -4
- package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/proposed-step-envelope.json +127 -5
- package/assets/skills/taphound-journey-generator/scripts/envelope.mjs +561 -0
- package/assets/skills/taphound-journey-generator/templates/external-flow.example.json +22 -0
- package/assets/skills/taphound-journey-generator/templates/flow.example.json +22 -0
- package/assets/skills/taphound-journey-generator/templates/journey-source.example.json +17 -0
- package/assets/skills/taphound-journey-generator/templates/taphound-journey-brief.example.md +70 -0
- package/assets/skills/taphound-verify-change/SKILL.md +91 -0
- package/assets/skills/taphound-verify-change/references/accept.md +38 -0
- package/assets/skills/taphound-verify-change/references/preserve.md +349 -0
- package/assets/skills/taphound-verify-change/schemas/workflow-manifest.schema.json +295 -0
- package/assets/skills/taphound-verify-change/scripts/handoff.mjs +482 -0
- package/assets/skills/taphound-verify-change/scripts/ui-refactor.mjs +505 -0
- package/dist/adapters/adb/adb-adapter.d.ts +16 -2
- package/dist/adapters/adb/adb-adapter.js +199 -0
- package/dist/adapters/adb/system-uiautomator-snapshot-provider.d.ts +13 -0
- package/dist/adapters/adb/system-uiautomator-snapshot-provider.js +122 -0
- package/dist/adapters/adb/ui-automator-parser.d.ts +3 -0
- package/dist/adapters/adb/ui-automator-parser.js +160 -0
- package/dist/adapters/adb/window-topology-parser.d.ts +2 -0
- package/dist/adapters/adb/window-topology-parser.js +101 -0
- package/dist/adapters/android-cli/android-cli-adapter.d.ts +16 -8
- package/dist/adapters/android-cli/android-cli-adapter.js +137 -15
- package/dist/adapters/android-cli/android-cli-snapshot-provider.d.ts +9 -0
- package/dist/adapters/android-cli/android-cli-snapshot-provider.js +99 -0
- package/dist/adapters/android-cli/layout-parser.js +12 -8
- package/dist/adapters/appium/appium-doctor.d.ts +7 -0
- package/dist/adapters/appium/appium-doctor.js +128 -0
- package/dist/adapters/appium/appium-ui-snapshot-provider.d.ts +34 -0
- package/dist/adapters/appium/appium-ui-snapshot-provider.js +240 -0
- package/dist/adapters/camera/camera-probe-adapter.d.ts +18 -0
- package/dist/adapters/camera/camera-probe-adapter.js +286 -0
- package/dist/adapters/filesystem/artifact-store.js +40 -1
- package/dist/adapters/filesystem/context-document-writer.d.ts +15 -0
- package/dist/adapters/filesystem/context-document-writer.js +112 -0
- package/dist/adapters/filesystem/external-flow-registry.d.ts +17 -0
- package/dist/adapters/filesystem/external-flow-registry.js +325 -0
- package/dist/adapters/filesystem/generation-session-store.d.ts +17 -11
- package/dist/adapters/filesystem/generation-session-store.js +281 -855
- package/dist/adapters/filesystem/generation-store/session-lock.d.ts +29 -0
- package/dist/adapters/filesystem/generation-store/session-lock.js +202 -0
- package/dist/adapters/filesystem/generation-store/session-transitions.d.ts +24 -0
- package/dist/adapters/filesystem/generation-store/session-transitions.js +340 -0
- package/dist/adapters/filesystem/generation-store/store-files.d.ts +50 -0
- package/dist/adapters/filesystem/generation-store/store-files.js +363 -0
- package/dist/adapters/filesystem/journey-composition-store.d.ts +23 -0
- package/dist/adapters/filesystem/journey-composition-store.js +151 -0
- package/dist/adapters/filesystem/knowledge-registry.d.ts +12 -0
- package/dist/adapters/filesystem/knowledge-registry.js +223 -0
- package/dist/adapters/filesystem/project-bound-file.js +3 -5
- package/dist/adapters/filesystem/project-file-inspector.d.ts +2 -0
- package/dist/adapters/filesystem/project-file-inspector.js +57 -28
- package/dist/adapters/filesystem/project-identity-inspector.d.ts +7 -0
- package/dist/adapters/filesystem/project-identity-inspector.js +215 -0
- package/dist/adapters/filesystem/project-inventory-inspector.d.ts +8 -0
- package/dist/adapters/filesystem/project-inventory-inspector.js +93 -0
- package/dist/adapters/filesystem/project-module-discoverer.d.ts +6 -0
- package/dist/adapters/filesystem/project-module-discoverer.js +158 -0
- package/dist/adapters/filesystem/skill-installer.d.ts +7 -2
- package/dist/adapters/filesystem/skill-installer.js +40 -11
- package/dist/adapters/filesystem/workspace-layout.d.ts +7 -0
- package/dist/adapters/filesystem/workspace-layout.js +57 -0
- package/dist/adapters/git/node-git-diff.d.ts +17 -0
- package/dist/adapters/git/node-git-diff.js +114 -0
- package/dist/adapters/process/node-detached-process-launcher.d.ts +6 -0
- package/dist/adapters/process/node-detached-process-launcher.js +96 -0
- package/dist/adapters/process/node-process-runner.js +11 -2
- package/dist/adapters/prompt/inquirer-align-prompt.d.ts +27 -0
- package/dist/adapters/prompt/inquirer-align-prompt.js +65 -0
- package/dist/adapters/prompt/inquirer-generation-prompt.js +3 -0
- package/dist/adapters/prompt/inquirer-recorder-prompt.d.ts +9 -1
- package/dist/adapters/prompt/inquirer-recorder-prompt.js +63 -0
- package/dist/adapters/runtime/adb-runtime-backend.d.ts +67 -0
- package/dist/adapters/runtime/adb-runtime-backend.js +206 -0
- package/dist/adapters/runtime/fake-runtime-backend.d.ts +87 -0
- package/dist/adapters/runtime/fake-runtime-backend.js +240 -0
- package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.d.ts +45 -0
- package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.js +153 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.d.ts +23 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.js +39 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.d.ts +20 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.js +180 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.d.ts +78 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.js +379 -0
- package/dist/adapters/runtime/mobile-mcp/mobile-mcp-tools.d.ts +46 -0
- package/dist/adapters/runtime/session-adb-view.d.ts +53 -0
- package/dist/adapters/runtime/session-adb-view.js +193 -0
- package/dist/adapters/runtime/session-backed-ports.d.ts +21 -0
- package/dist/adapters/runtime/session-backed-ports.js +43 -0
- package/dist/adapters/runtime/shared-session-runtime-backend.d.ts +12 -0
- package/dist/adapters/runtime/shared-session-runtime-backend.js +64 -0
- package/dist/adapters/ui/auto-ui-snapshot-provider.d.ts +8 -0
- package/dist/adapters/ui/auto-ui-snapshot-provider.js +48 -0
- package/dist/adapters/ui/device-layout-temp.d.ts +6 -0
- package/dist/adapters/ui/device-layout-temp.js +18 -0
- package/dist/adapters/ui/device-ui-environment.d.ts +13 -0
- package/dist/adapters/ui/device-ui-environment.js +81 -0
- package/dist/adapters/ui/layout-normalization.d.ts +9 -0
- package/dist/adapters/ui/layout-normalization.js +44 -0
- package/dist/adapters/ui/ui-snapshot-error.d.ts +11 -0
- package/dist/adapters/ui/ui-snapshot-error.js +12 -0
- package/dist/adapters/ui/ui-snapshot-support.d.ts +15 -0
- package/dist/adapters/ui/ui-snapshot-support.js +12 -0
- package/dist/application/align/align-service.d.ts +42 -0
- package/dist/application/align/align-service.js +106 -0
- package/dist/application/assertion/expectation-evaluator.d.ts +18 -5
- package/dist/application/assertion/expectation-evaluator.js +156 -18
- package/dist/application/assertion/guarded-expectation.d.ts +45 -0
- package/dist/application/assertion/guarded-expectation.js +74 -0
- package/dist/application/checkpoint/baseline-capturer.d.ts +26 -0
- package/dist/application/checkpoint/baseline-capturer.js +163 -0
- package/dist/application/checkpoint/baseline-error.d.ts +5 -0
- package/dist/application/checkpoint/baseline-error.js +8 -0
- package/dist/application/checkpoint/baseline-service.d.ts +31 -0
- package/dist/application/checkpoint/baseline-service.js +147 -0
- package/dist/application/checkpoint/checkpoint-evaluator.d.ts +35 -0
- package/dist/application/checkpoint/checkpoint-evaluator.js +415 -0
- package/dist/application/checkpoint/regression-comparator.d.ts +18 -0
- package/dist/application/checkpoint/regression-comparator.js +192 -0
- package/dist/application/collector/logcat-collector.d.ts +22 -1
- package/dist/application/collector/logcat-collector.js +103 -15
- package/dist/application/collector/logcat-event.d.ts +8 -0
- package/dist/application/collector/logcat-event.js +79 -0
- package/dist/application/collector/logcat-stop.d.ts +2 -0
- package/dist/application/collector/logcat-stop.js +11 -0
- package/dist/application/context/context-generator.d.ts +45 -0
- package/dist/application/context/context-generator.js +228 -0
- package/dist/application/context/context-loader.d.ts +40 -0
- package/dist/application/context/context-loader.js +223 -0
- package/dist/application/context/context-refresher.d.ts +59 -0
- package/dist/application/context/context-refresher.js +349 -0
- package/dist/application/context/context-rehasher.d.ts +36 -0
- package/dist/application/context/context-rehasher.js +110 -0
- package/dist/application/context/context-validator.d.ts +23 -1
- package/dist/application/context/context-validator.js +116 -9
- package/dist/application/context/evidence-hash.d.ts +1 -0
- package/dist/application/context/evidence-hash.js +125 -0
- package/dist/application/context/evidence-match.d.ts +9 -0
- package/dist/application/context/evidence-match.js +8 -0
- package/dist/application/context/shard-identity.d.ts +2 -0
- package/dist/application/context/shard-identity.js +7 -0
- package/dist/application/contract/contract-loader.d.ts +25 -0
- package/dist/application/contract/contract-loader.js +68 -0
- package/dist/application/contract/contract-review.d.ts +25 -0
- package/dist/application/contract/contract-review.js +51 -0
- package/dist/application/contract/contract-verifier.d.ts +53 -0
- package/dist/application/contract/contract-verifier.js +645 -0
- package/dist/application/devices/resolve-device-assignments.d.ts +21 -0
- package/dist/application/devices/resolve-device-assignments.js +60 -0
- package/dist/application/diagnosis/failure-classifier.d.ts +23 -0
- package/dist/application/diagnosis/failure-classifier.js +179 -0
- package/dist/application/doctor/doctor-service.d.ts +36 -3
- package/dist/application/doctor/doctor-service.js +255 -25
- package/dist/application/generation/generation-app-preparer.d.ts +20 -0
- package/dist/application/generation/generation-app-preparer.js +28 -0
- package/dist/application/generation/generation-config-service.d.ts +21 -0
- package/dist/application/generation/generation-config-service.js +53 -0
- package/dist/application/generation/generation-confirmation-service.d.ts +14 -3
- package/dist/application/generation/generation-confirmation-service.js +109 -24
- package/dist/application/generation/generation-context-snapshot.d.ts +6 -0
- package/dist/application/generation/generation-context-snapshot.js +29 -0
- package/dist/application/generation/generation-finalizer.d.ts +15 -9
- package/dist/application/generation/generation-finalizer.js +167 -70
- package/dist/application/generation/generation-publisher.js +12 -8
- package/dist/application/generation/generation-recovery-service.d.ts +35 -0
- package/dist/application/generation/generation-recovery-service.js +144 -0
- package/dist/application/generation/generation-reopen-service.d.ts +15 -0
- package/dist/application/generation/generation-reopen-service.js +37 -0
- package/dist/application/generation/generation-replace-service.d.ts +32 -0
- package/dist/application/generation/generation-replace-service.js +116 -0
- package/dist/application/generation/generation-starter.d.ts +44 -4
- package/dist/application/generation/generation-starter.js +175 -8
- package/dist/application/generation/generation-step-executor.d.ts +67 -5
- package/dist/application/generation/generation-step-executor.js +471 -108
- package/dist/application/generation/proposed-step-validator.js +96 -30
- package/dist/application/generation/replay-policy-loader.d.ts +16 -0
- package/dist/application/generation/replay-policy-loader.js +29 -0
- package/dist/application/generation/risk-evaluator.d.ts +4 -1
- package/dist/application/generation/risk-evaluator.js +118 -3
- package/dist/application/generation/runtime-observer.d.ts +39 -7
- package/dist/application/generation/runtime-observer.js +193 -24
- package/dist/application/impact/impact-resolver.d.ts +32 -0
- package/dist/application/impact/impact-resolver.js +160 -0
- package/dist/application/init/init-service.js +26 -13
- package/dist/application/interaction/action-executor.d.ts +3 -2
- package/dist/application/interaction/action-executor.js +11 -1
- package/dist/application/interaction/action-target.d.ts +17 -0
- package/dist/application/interaction/action-target.js +40 -0
- package/dist/application/interaction/external-step-runner.d.ts +153 -0
- package/dist/application/interaction/external-step-runner.js +332 -0
- package/dist/application/interaction/fallback-resolver.d.ts +6 -3
- package/dist/application/interaction/fallback-resolver.js +7 -5
- package/dist/application/interaction/scroll-to-executor.d.ts +17 -3
- package/dist/application/interaction/scroll-to-executor.js +118 -36
- package/dist/application/journey/external-flow-resolver.d.ts +25 -0
- package/dist/application/journey/external-flow-resolver.js +22 -0
- package/dist/application/journey/journey-check-service.d.ts +54 -0
- package/dist/application/journey/journey-check-service.js +207 -0
- package/dist/application/journey/journey-promoter.d.ts +26 -0
- package/dist/application/journey/journey-promoter.js +123 -0
- package/dist/application/journey/journey-resolver.d.ts +42 -0
- package/dist/application/journey/journey-resolver.js +239 -0
- package/dist/application/journey/journey-retirer.d.ts +25 -0
- package/dist/application/journey/journey-retirer.js +87 -0
- package/dist/application/knowledge/anchor-resolver.d.ts +36 -0
- package/dist/application/knowledge/anchor-resolver.js +110 -0
- package/dist/application/knowledge/knowledge-loader.d.ts +16 -0
- package/dist/application/knowledge/knowledge-loader.js +36 -0
- package/dist/application/locator/layout-failure-summary.d.ts +2 -0
- package/dist/application/locator/layout-failure-summary.js +67 -0
- package/dist/application/locator/layout-traversal.d.ts +11 -0
- package/dist/application/locator/layout-traversal.js +18 -0
- package/dist/application/locator/locator-resolver.d.ts +13 -1
- package/dist/application/locator/locator-resolver.js +182 -18
- package/dist/application/observe/observe-service.d.ts +20 -0
- package/dist/application/observe/observe-service.js +91 -0
- package/dist/application/project/project-describer.d.ts +14 -6
- package/dist/application/project/project-describer.js +38 -5
- package/dist/application/recognition/screen-detector.d.ts +28 -0
- package/dist/application/recognition/screen-detector.js +111 -0
- package/dist/application/recorder/locator-selector.js +151 -17
- package/dist/application/recorder/recorder-service.d.ts +16 -4
- package/dist/application/recorder/recorder-service.js +420 -128
- package/dist/application/report/report-writer.js +1 -1
- package/dist/application/runtime/cold-launch.d.ts +28 -0
- package/dist/application/runtime/cold-launch.js +59 -0
- package/dist/application/runtime/step-runner.d.ts +49 -4
- package/dist/application/runtime/step-runner.js +721 -130
- package/dist/application/runtime/verify-runtime.d.ts +57 -7
- package/dist/application/runtime/verify-runtime.js +554 -174
- package/dist/application/ui/cached-ui-snapshot-provider.d.ts +45 -0
- package/dist/application/ui/cached-ui-snapshot-provider.js +111 -0
- package/dist/application/ui/ui-snapshot-lifecycle.d.ts +2 -0
- package/dist/application/ui/ui-snapshot-lifecycle.js +8 -0
- package/dist/application/ui/ui-stability-probe.d.ts +3 -0
- package/dist/application/ui/ui-stability-probe.js +8 -0
- package/dist/application/wait/idle-advice.d.ts +6 -0
- package/dist/application/wait/idle-advice.js +27 -0
- package/dist/application/wait/idle-profiles.d.ts +15 -0
- package/dist/application/wait/idle-profiles.js +75 -0
- package/dist/application/wait/idle-waiter.d.ts +28 -4
- package/dist/application/wait/idle-waiter.js +186 -15
- package/dist/cli/commands/align.d.ts +3 -0
- package/dist/cli/commands/align.js +124 -0
- package/dist/cli/commands/baseline.d.ts +3 -0
- package/dist/cli/commands/baseline.js +130 -0
- package/dist/cli/commands/context.js +300 -27
- package/dist/cli/commands/contract.d.ts +3 -0
- package/dist/cli/commands/contract.js +120 -0
- package/dist/cli/commands/doctor.js +16 -9
- package/dist/cli/commands/failure.d.ts +3 -0
- package/dist/cli/commands/failure.js +63 -0
- package/dist/cli/commands/generation/lifecycle-commands.d.ts +5 -0
- package/dist/cli/commands/generation/lifecycle-commands.js +211 -0
- package/dist/cli/commands/generation/session-commands.d.ts +11 -0
- package/dist/cli/commands/generation/session-commands.js +472 -0
- package/dist/cli/commands/generation/shared.d.ts +1414 -0
- package/dist/cli/commands/generation/shared.js +291 -0
- package/dist/cli/commands/generation/step-commands.d.ts +8 -0
- package/dist/cli/commands/generation/step-commands.js +315 -0
- package/dist/cli/commands/generation.js +10 -507
- package/dist/cli/commands/impact.d.ts +3 -0
- package/dist/cli/commands/impact.js +87 -0
- package/dist/cli/commands/init.js +13 -6
- package/dist/cli/commands/journey.d.ts +3 -0
- package/dist/cli/commands/journey.js +382 -0
- package/dist/cli/commands/knowledge.d.ts +3 -0
- package/dist/cli/commands/knowledge.js +93 -0
- package/dist/cli/commands/observe.d.ts +3 -0
- package/dist/cli/commands/observe.js +127 -0
- package/dist/cli/commands/project.js +2 -1
- package/dist/cli/commands/record.js +18 -5
- package/dist/cli/commands/verify.js +273 -63
- package/dist/cli/dependencies.d.ts +125 -1
- package/dist/cli/dependencies.js +450 -51
- package/dist/cli/diff-verification.d.ts +41 -0
- package/dist/cli/diff-verification.js +192 -0
- package/dist/cli/main.js +49 -1
- package/dist/cli/output.d.ts +5 -3
- package/dist/cli/output.js +12 -0
- package/dist/cli/program.js +19 -1
- package/dist/cli/project-root.d.ts +1 -0
- package/dist/cli/project-root.js +6 -0
- package/dist/cli/runtime-selection.d.ts +22 -0
- package/dist/cli/runtime-selection.js +92 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +14 -0
- package/dist/cli/workspace-guard.d.ts +2 -0
- package/dist/cli/workspace-guard.js +3 -0
- package/dist/domain/binding-reference.d.ts +4 -0
- package/dist/domain/binding-reference.js +23 -0
- package/dist/domain/checkpoint.d.ts +404 -0
- package/dist/domain/checkpoint.js +297 -0
- package/dist/domain/config.d.ts +107 -1
- package/dist/domain/config.js +52 -6
- package/dist/domain/contract.d.ts +413 -0
- package/dist/domain/contract.js +196 -0
- package/dist/domain/external-flow.d.ts +493 -0
- package/dist/domain/external-flow.js +15 -0
- package/dist/domain/failure-classification.d.ts +176 -0
- package/dist/domain/failure-classification.js +169 -0
- package/dist/domain/failure.d.ts +2 -1
- package/dist/domain/failure.js +123 -0
- package/dist/domain/generation.d.ts +1671 -132
- package/dist/domain/generation.js +202 -13
- package/dist/domain/geometry.d.ts +13 -0
- package/dist/domain/geometry.js +16 -0
- package/dist/domain/impact.d.ts +71 -0
- package/dist/domain/impact.js +76 -0
- package/dist/domain/init.d.ts +12 -4
- package/dist/domain/init.js +24 -18
- package/dist/domain/journey-composition.d.ts +2285 -0
- package/dist/domain/journey-composition.js +85 -0
- package/dist/domain/journey-lifecycle.d.ts +10 -0
- package/dist/domain/journey-lifecycle.js +9 -0
- package/dist/domain/journey.d.ts +2419 -212
- package/dist/domain/journey.js +384 -14
- package/dist/domain/knowledge.d.ts +165 -0
- package/dist/domain/knowledge.js +188 -0
- package/dist/domain/layout.d.ts +34 -5
- package/dist/domain/layout.js +64 -6
- package/dist/domain/locator-evidence.d.ts +3 -0
- package/dist/domain/locator-evidence.js +36 -0
- package/dist/domain/logcat-event.d.ts +54 -0
- package/dist/domain/logcat-event.js +40 -0
- package/dist/domain/observation.d.ts +33 -0
- package/dist/domain/observation.js +18 -0
- package/dist/domain/project-context.d.ts +219 -1
- package/dist/domain/project-context.js +209 -6
- package/dist/domain/proposed-step.d.ts +340 -60
- package/dist/domain/proposed-step.js +23 -3
- package/dist/domain/report.d.ts +1455 -28
- package/dist/domain/report.js +211 -14
- package/dist/domain/runtime-snapshot.d.ts +58 -1
- package/dist/domain/runtime-snapshot.js +14 -3
- package/dist/domain/runtime.d.ts +50 -0
- package/dist/domain/runtime.js +36 -0
- package/dist/domain/system-app-profiles.d.ts +6 -0
- package/dist/domain/system-app-profiles.js +43 -0
- package/dist/domain/ui-backend.d.ts +28 -0
- package/dist/domain/ui-backend.js +33 -0
- package/dist/domain/ui-cache.d.ts +11 -0
- package/dist/domain/ui-cache.js +10 -0
- package/dist/domain/window-hierarchy.d.ts +84 -0
- package/dist/domain/window-hierarchy.js +172 -0
- package/dist/domain/workflow-manifest.d.ts +77 -0
- package/dist/domain/workflow-manifest.js +136 -0
- package/dist/domain/workspace.d.ts +28 -0
- package/dist/domain/workspace.js +72 -0
- package/dist/ports/adb.d.ts +34 -1
- package/dist/ports/align-prompt.d.ts +11 -0
- package/dist/ports/align-prompt.js +6 -0
- package/dist/ports/anchor-resolver.d.ts +30 -0
- package/dist/ports/anchor-resolver.js +1 -0
- package/dist/ports/annotated-screen-resolver.d.ts +4 -0
- package/dist/ports/annotated-screen-resolver.js +1 -0
- package/dist/ports/camera-probe.d.ts +23 -0
- package/dist/ports/camera-probe.js +8 -0
- package/dist/ports/context-document-writer.d.ts +24 -0
- package/dist/ports/context-document-writer.js +1 -0
- package/dist/ports/detached-process-launcher.d.ts +12 -0
- package/dist/ports/detached-process-launcher.js +1 -0
- package/dist/ports/external-flow-registry.d.ts +37 -0
- package/dist/ports/external-flow-registry.js +1 -0
- package/dist/ports/generation-prompt.d.ts +2 -1
- package/dist/ports/generation-session-store.d.ts +12 -2
- package/dist/ports/git-diff.d.ts +9 -0
- package/dist/ports/git-diff.js +1 -0
- package/dist/ports/journey-composition-store.d.ts +17 -0
- package/dist/ports/journey-composition-store.js +1 -0
- package/dist/ports/knowledge-registry.d.ts +20 -0
- package/dist/ports/knowledge-registry.js +1 -0
- package/dist/ports/process-runner.d.ts +7 -0
- package/dist/ports/project-file-inspector.d.ts +1 -0
- package/dist/ports/project-identity-inspector.d.ts +24 -0
- package/dist/ports/project-identity-inspector.js +1 -0
- package/dist/ports/project-inventory-inspector.d.ts +21 -0
- package/dist/ports/project-inventory-inspector.js +1 -0
- package/dist/ports/project-module-discoverer.d.ts +26 -0
- package/dist/ports/project-module-discoverer.js +1 -0
- package/dist/ports/recorder-prompt.d.ts +10 -1
- package/dist/ports/runtime-backend.d.ts +89 -0
- package/dist/ports/runtime-backend.js +13 -0
- package/dist/ports/runtime-capability.d.ts +12 -0
- package/dist/ports/runtime-capability.js +20 -0
- package/dist/ports/runtime-session-ports.d.ts +25 -0
- package/dist/ports/runtime-session-ports.js +1 -0
- package/dist/ports/screenshot.d.ts +11 -0
- package/dist/ports/screenshot.js +1 -0
- package/dist/ports/skill-installer.d.ts +2 -2
- package/dist/ports/ui-snapshot.d.ts +35 -0
- package/dist/ports/ui-snapshot.js +1 -0
- package/dist/ports/ui-stability.d.ts +19 -0
- package/dist/ports/ui-stability.js +1 -0
- package/dist/ports/workspace-layout.d.ts +4 -0
- package/dist/ports/workspace-layout.js +1 -0
- package/dist/shared/errors.d.ts +2 -0
- package/dist/shared/errors.js +22 -0
- package/dist/shared/paths.d.ts +2 -0
- package/dist/shared/paths.js +24 -0
- package/dist/shared/strings.d.ts +2 -0
- package/dist/shared/strings.js +16 -0
- package/package.json +6 -1
- package/assets/skills/taphound-ai-journey/GUIDE.md +0 -862
- package/assets/skills/taphound-ai-journey/SKILL.md +0 -377
- package/assets/skills/taphound-ai-journey/prompts/analyze-project.md +0 -526
- package/assets/skills/taphound-ai-journey/prompts/generate-step.md +0 -109
- package/assets/skills/taphound-ai-journey/schemas/project-context.json +0 -81
- package/assets/skills/taphound-ai-journey/templates/project-context.example.json +0 -49
- package/dist/ports/android-cli.d.ts +0 -21
- /package/dist/{ports/android-cli.js → adapters/runtime/mobile-mcp/mobile-mcp-tools.js} +0 -0
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: taphound-ai-journey
|
|
3
|
-
description: >-
|
|
4
|
-
Drive TapHound's deterministic Android journey generation protocol
|
|
5
|
-
end-to-end. Analyze Android project source to produce a Project Context,
|
|
6
|
-
then iteratively observe device state, propose and execute UI steps via
|
|
7
|
-
the TapHound CLI, and finalize a verified Journey. Use when the user
|
|
8
|
-
wants to create or verify Android test journeys using AI-driven
|
|
9
|
-
generation, record UI interactions for testing, automate Android UI
|
|
10
|
-
test scenarios, or generate TapHound Journey files from a natural-language
|
|
11
|
-
test goal.
|
|
12
|
-
compatibility: >-
|
|
13
|
-
Requires Node.js 22+, Android SDK with ADB and uiautomator, one online
|
|
14
|
-
Android device (emulator or USB), and TapHound built and linked via
|
|
15
|
-
npm link.
|
|
16
|
-
metadata:
|
|
17
|
-
author: TapHound
|
|
18
|
-
version: "1.0"
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# TapHound AI Journey Skill
|
|
22
|
-
|
|
23
|
-
Platform-neutral instructions for any AI agent (Droid, Claude Code, Cursor,
|
|
24
|
-
etc.) to drive TapHound's deterministic generation protocol end-to-end.
|
|
25
|
-
|
|
26
|
-
## Skill Directory
|
|
27
|
-
|
|
28
|
-
All file references in this document are relative to the Skill directory:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
assets/skills/taphound-ai-journey/
|
|
32
|
-
├── SKILL.md # This file (entry point)
|
|
33
|
-
├── GUIDE.md # Detailed step-by-step usage guide
|
|
34
|
-
├── prompts/
|
|
35
|
-
│ ├── analyze-project.md # Phase 1: source analysis guidance
|
|
36
|
-
│ ├── generate-step.md # Phase 2: next-step generation guidance
|
|
37
|
-
│ └── check-completion.md # Phase 2: Goal completion check
|
|
38
|
-
├── schemas/
|
|
39
|
-
│ ├── project-context.json # ProjectContext JSON Schema
|
|
40
|
-
│ ├── proposed-step-envelope.json # {version, proposal, snapshot} envelope
|
|
41
|
-
│ └── observe-output.json # generation observe --json output shape
|
|
42
|
-
└── templates/
|
|
43
|
-
└── project-context.example.json # Full Context example
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
When this document says "Read `prompts/analyze-project.md`", the full path is
|
|
47
|
-
`assets/skills/taphound-ai-journey/prompts/analyze-project.md` (relative
|
|
48
|
-
to the repository root that contains the `assets/` directory).
|
|
49
|
-
|
|
50
|
-
## How to Use This Skill
|
|
51
|
-
|
|
52
|
-
This Skill ships with the TapHound npm package at `assets/skills/taphound-ai-journey/`.
|
|
53
|
-
Run `taphound init` to copy it into each agent's expected skill directory:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
taphound init --agent droid,claude,codex,cursor
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
For global (user-level) installation:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
taphound init --agent droid --global
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
In the TapHound source repository, `.factory/skills/taphound-ai-journey` is a
|
|
66
|
-
symlink to `assets/skills/taphound-ai-journey` so Droid auto-discovers it.
|
|
67
|
-
|
|
68
|
-
- **Droid**: Auto-discovered from `.factory/skills/` (or run `taphound init --agent droid`).
|
|
69
|
-
Invoke with the Skill tool when the user wants to generate or verify an Android journey.
|
|
70
|
-
- **Claude Code**: Run `taphound init --agent claude` to install to `.claude/skills/`,
|
|
71
|
-
then invoke with the Skill tool.
|
|
72
|
-
- **Codex**: Run `taphound init --agent codex` to install to `.agents/skills/`.
|
|
73
|
-
- **Cursor**: Run `taphound init --agent cursor` to install to `.cursor/skills/`.
|
|
74
|
-
- **Other agents**: Run `taphound init --agent other` to install to `.agents/skills/`.
|
|
75
|
-
|
|
76
|
-
The agent does NOT need to understand TapHound's internal TypeScript code.
|
|
77
|
-
It only needs to read these instructions, the schema files, and the prompt
|
|
78
|
-
templates, then call the TapHound CLI.
|
|
79
|
-
|
|
80
|
-
## Prerequisites
|
|
81
|
-
|
|
82
|
-
- Node.js 22+ (avoid Node 23)
|
|
83
|
-
- Android SDK with ADB and `uiautomator` (Android CLI)
|
|
84
|
-
- One online Android device (emulator or USB)
|
|
85
|
-
- TapHound built and linked: `npm run build && npm link` (registers the
|
|
86
|
-
`taphound` command)
|
|
87
|
-
|
|
88
|
-
## Inputs
|
|
89
|
-
|
|
90
|
-
| Parameter | Required | Default | Description |
|
|
91
|
-
|------------|----------|--------------------------------|--------------------------------------|
|
|
92
|
-
| project | yes | — | Android project root path |
|
|
93
|
-
| goal | yes | — | Natural-language test scenario |
|
|
94
|
-
| config | no | `taphound.config.json` | TapHound config path (relative to project) |
|
|
95
|
-
| device | no | doctor selects | Device serial |
|
|
96
|
-
| output | no | `journeys/generated.json` | Output journey path (relative to project) |
|
|
97
|
-
| maxSteps | no | 30 | Maximum generation steps |
|
|
98
|
-
| retryCount | no | 3 | Retries per rejected step |
|
|
99
|
-
|
|
100
|
-
## Phase 0: Preflight
|
|
101
|
-
|
|
102
|
-
1. Verify `taphound` command is available. If not, run `npm run build &&
|
|
103
|
-
npm link` in the TapHound repo.
|
|
104
|
-
2. Run `adb devices -l`. Confirm at least one device is online.
|
|
105
|
-
3. Run (append `--device <serial>` when the `device` input was supplied):
|
|
106
|
-
```bash
|
|
107
|
-
taphound doctor --project <project> --json
|
|
108
|
-
```
|
|
109
|
-
Confirm `"status": "passed"`. Capture `deviceSerial` from the result.
|
|
110
|
-
If `device` was supplied, use it; otherwise use the doctor's selection.
|
|
111
|
-
If doctor fails, stop and report the failure.
|
|
112
|
-
|
|
113
|
-
4. **Context currency check**: If a Project Context already exists at
|
|
114
|
-
`<project>/.taphound/context/project-context.json`, verify it is
|
|
115
|
-
still valid before reusing it:
|
|
116
|
-
```bash
|
|
117
|
-
taphound context status \
|
|
118
|
-
--project <project> \
|
|
119
|
-
--context .taphound/context/project-context.json \
|
|
120
|
-
--json
|
|
121
|
-
```
|
|
122
|
-
- `"valid"`: Hashes match. Do a quick structural check (Step 5) to
|
|
123
|
-
detect new files not in the manifest.
|
|
124
|
-
- `"stale"`: Tracked files changed. Needs incremental update or full
|
|
125
|
-
regeneration (see GUIDE.md Section 5).
|
|
126
|
-
- `"invalid"`: Needs full regeneration.
|
|
127
|
-
- If the file does not exist, proceed to Phase 1 (full generation).
|
|
128
|
-
|
|
129
|
-
5. **Structural completeness check** (when status is `"valid"`):
|
|
130
|
-
`context status` only checks hashes of files already listed — it
|
|
131
|
-
cannot detect NEW files. Run a quick count comparison:
|
|
132
|
-
```bash
|
|
133
|
-
# Count Activity source files on disk
|
|
134
|
-
find <project> \( -name "*.kt" -o -name "*.java" \) \
|
|
135
|
-
-not -path "*/build/*" \
|
|
136
|
-
-exec grep -l "extends.*Activity\|:.*Activity(" {} + | wc -l
|
|
137
|
-
```
|
|
138
|
-
Compare with the number of Activity source files in the Context's
|
|
139
|
-
`manifest.files`. If the on-disk count is higher, new Activities were
|
|
140
|
-
added — proceed to Phase 1 for full regeneration.
|
|
141
|
-
|
|
142
|
-
If both status and structural check pass, skip Phase 1 and go directly
|
|
143
|
-
to Phase 2.
|
|
144
|
-
|
|
145
|
-
## Phase 1: Project Context Generation
|
|
146
|
-
|
|
147
|
-
> Read `prompts/analyze-project.md` before starting — it contains detailed
|
|
148
|
-
> guidance on multi-module discovery, packageName resolution, and complex
|
|
149
|
-
> layout structures. Read `schemas/project-context.json` to understand the
|
|
150
|
-
> required JSON structure. Use `templates/project-context.example.json`
|
|
151
|
-
> as a reference template.
|
|
152
|
-
|
|
153
|
-
1. Analyze the Android project source per `prompts/analyze-project.md`:
|
|
154
|
-
- Discover modules via `./gradlew projects` (fallback: parse
|
|
155
|
-
`settings.gradle`).
|
|
156
|
-
- Determine `applicationId` from the app module's build file.
|
|
157
|
-
- Identify the launch Activity from the app module's manifest.
|
|
158
|
-
- Scan all modules for Activities, click handlers, Logcat tags, layout
|
|
159
|
-
XML (resolving `<include>`, `<merge>`, `<layout>`, `<ViewStub>`).
|
|
160
|
-
2. Compute SHA-256 for each file you include in the manifest:
|
|
161
|
-
```bash
|
|
162
|
-
node -e "const c=require('node:crypto');const f=require('node:fs');process.stdout.write(c.createHash('sha256').update(f.readFileSync('<project>/<relative-path>')).digest('hex'))"
|
|
163
|
-
```
|
|
164
|
-
NEVER guess a hash. Always compute it.
|
|
165
|
-
3. Generate the Project Context JSON matching `schemas/project-context.json`.
|
|
166
|
-
4. Write it to `<project>/.taphound/context/project-context.json`.
|
|
167
|
-
5. Validate:
|
|
168
|
-
```bash
|
|
169
|
-
taphound context validate \
|
|
170
|
-
--project <project> \
|
|
171
|
-
--context .taphound/context/project-context.json \
|
|
172
|
-
--json
|
|
173
|
-
```
|
|
174
|
-
6. If validation fails, read the error message, fix the JSON, and retry.
|
|
175
|
-
Common failures:
|
|
176
|
-
- Package name mismatch between `taphound.config.json` and Context.
|
|
177
|
-
- Stale or incorrect SHA-256 hash.
|
|
178
|
-
- Path containing `..` or starting with `/`.
|
|
179
|
-
- File listed in manifest but not found on disk.
|
|
180
|
-
|
|
181
|
-
## Phase 2: Journey Generation
|
|
182
|
-
|
|
183
|
-
> Read `schemas/proposed-step-envelope.json` to understand the envelope
|
|
184
|
-
> structure before building step proposals. Read `prompts/generate-step.md`
|
|
185
|
-
> for element-matching and step-generation guidance. Read
|
|
186
|
-
> `prompts/check-completion.md` for Goal-completion criteria.
|
|
187
|
-
|
|
188
|
-
1. Start a generation session:
|
|
189
|
-
```bash
|
|
190
|
-
taphound generation start \
|
|
191
|
-
--project <project> \
|
|
192
|
-
--config <config> \
|
|
193
|
-
--context .taphound/context/project-context.json \
|
|
194
|
-
--device <serial> \
|
|
195
|
-
--json
|
|
196
|
-
```
|
|
197
|
-
Capture `generationId` from the result. The `config` path is relative to
|
|
198
|
-
the project root. The selected device is bound to this session; subsequent
|
|
199
|
-
`observe`, `step`, `confirm`, and `manual` commands use the session binding
|
|
200
|
-
and do not accept `--device`.
|
|
201
|
-
|
|
202
|
-
2. Initialize a `completedSteps` list (empty at start).
|
|
203
|
-
|
|
204
|
-
3. **Loop** for up to `maxSteps` iterations:
|
|
205
|
-
|
|
206
|
-
a. **Observe** the current device state:
|
|
207
|
-
```bash
|
|
208
|
-
taphound generation observe \
|
|
209
|
-
--project <project> \
|
|
210
|
-
--session <generationId> \
|
|
211
|
-
--json
|
|
212
|
-
```
|
|
213
|
-
Parse the result. Capture:
|
|
214
|
-
- `generationId`, `baseRevision`, `snapshotHash` (the binding).
|
|
215
|
-
- `snapshot` (the full RuntimeSnapshot object, including `layout`).
|
|
216
|
-
|
|
217
|
-
b. **Check completion**: Read `prompts/check-completion.md`. Using the
|
|
218
|
-
Goal and `completedSteps`, determine if the Goal is accomplished.
|
|
219
|
-
If `{"complete": true}`, break out of the loop and go to Phase 3.
|
|
220
|
-
|
|
221
|
-
c. **Generate proposed step**: Read `prompts/generate-step.md`. Using the
|
|
222
|
-
Goal, Project Context, `snapshot.layout`, and `snapshot.activity`,
|
|
223
|
-
generate the next proposed step JSON (without `binding`).
|
|
224
|
-
|
|
225
|
-
d. **Build the envelope**: Combine the proposed step with the binding and
|
|
226
|
-
snapshot:
|
|
227
|
-
```json
|
|
228
|
-
{
|
|
229
|
-
"version": 1,
|
|
230
|
-
"proposal": { ...proposedStep, "binding": {
|
|
231
|
-
"generationId": "<from observe>",
|
|
232
|
-
"baseRevision": <from observe>,
|
|
233
|
-
"snapshotHash": "<from observe>"
|
|
234
|
-
}},
|
|
235
|
-
"snapshot": { ...full snapshot from observe... }
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
Write this to a temporary file (e.g., `/tmp/taphound-step-<timestamp>.json`).
|
|
239
|
-
|
|
240
|
-
e. **Execute the step**:
|
|
241
|
-
```bash
|
|
242
|
-
taphound generation step \
|
|
243
|
-
--project <project> \
|
|
244
|
-
--session <generationId> \
|
|
245
|
-
--input <envelope-path> \
|
|
246
|
-
--json
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
f. **Handle the result**:
|
|
250
|
-
- **`status: "succeeded"`**: Add the step to `completedSteps`. Clean
|
|
251
|
-
up the temp file. Continue to the next iteration.
|
|
252
|
-
- **`status: "confirmationRequired"`**: Present the challenge details
|
|
253
|
-
(action summary, challenge ID) to the user. Wait for explicit
|
|
254
|
-
human approval. If approved, run:
|
|
255
|
-
```bash
|
|
256
|
-
taphound generation confirm \
|
|
257
|
-
--project <project> \
|
|
258
|
-
--session <generationId> \
|
|
259
|
-
--challenge <challengeId> \
|
|
260
|
-
--json
|
|
261
|
-
```
|
|
262
|
-
Do NOT auto-approve. If the user declines, stop and report.
|
|
263
|
-
- **`status: "error"` (any failure code)**: Read the failure code and
|
|
264
|
-
message. Decrement the retry budget for this step.
|
|
265
|
-
- If retries remain: re-observe (go back to step a) and re-generate
|
|
266
|
-
the step, this time accounting for the failure feedback (e.g., if
|
|
267
|
-
the locator was not found, try a different locator; if the
|
|
268
|
-
activity was wrong, adjust the prediction).
|
|
269
|
-
- If retries are exhausted: stop and report the failure with the
|
|
270
|
-
session ID, last error, and step index.
|
|
271
|
-
- **`status: "recoveryRequired"`**: The session is in a crash-
|
|
272
|
-
consistent recovery state. Stop and report. The user must decide
|
|
273
|
-
whether to recover or abandon. Do not attempt further steps.
|
|
274
|
-
|
|
275
|
-
g. Clean up the temp envelope file after each iteration (success or
|
|
276
|
-
failure).
|
|
277
|
-
|
|
278
|
-
## Phase 3: Finalize
|
|
279
|
-
|
|
280
|
-
1. Run finalize:
|
|
281
|
-
```bash
|
|
282
|
-
taphound generation finalize \
|
|
283
|
-
--project <project> \
|
|
284
|
-
--session <generationId> \
|
|
285
|
-
--context .taphound/context/project-context.json \
|
|
286
|
-
--output <output> \
|
|
287
|
-
--device <serial> \
|
|
288
|
-
--json
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
2. Check the result `status`:
|
|
292
|
-
- **`"verified"`**: Success. Report to the user:
|
|
293
|
-
- `bundlePath` (authoritative generation bundle)
|
|
294
|
-
- `journeyPath` (exported Journey v1)
|
|
295
|
-
- `metaPath` (sidecar meta with verification evidence)
|
|
296
|
-
- `replayed` (should be `true`)
|
|
297
|
-
- **Any other status**: Failure. Report the failure detail and session
|
|
298
|
-
ID. Do NOT claim success. The session may still be recoverable.
|
|
299
|
-
|
|
300
|
-
3. Clean up any remaining temp files.
|
|
301
|
-
|
|
302
|
-
## Error Handling Summary
|
|
303
|
-
|
|
304
|
-
| Situation | Action |
|
|
305
|
-
|------------------------|---------------------------------------------|
|
|
306
|
-
| Doctor fails | Stop, report environment issue |
|
|
307
|
-
| Context validation fails | Fix JSON, retry validation |
|
|
308
|
-
| Step rejected | Re-observe + re-generate (up to retryCount) |
|
|
309
|
-
| Confirmation required | Present to user, wait for approval |
|
|
310
|
-
| Recovery required | Stop, report session ID |
|
|
311
|
-
| Max steps exceeded | Stop, report incomplete Goal |
|
|
312
|
-
| Finalize not verified | Report failure detail, do not claim success |
|
|
313
|
-
|
|
314
|
-
## Key Rules
|
|
315
|
-
|
|
316
|
-
- The agent NEVER auto-approves a confirmation challenge.
|
|
317
|
-
- The agent NEVER bypasses Core safety (package guard, risk policy, locator
|
|
318
|
-
uniqueness).
|
|
319
|
-
- SHA-256 hashes are ALWAYS computed via shell, never guessed.
|
|
320
|
-
- The agent does NOT modify TapHound Core source code.
|
|
321
|
-
- The agent does NOT use coordinates, visual guessing, or fallback.
|
|
322
|
-
- Locator priority is fixed: `resourceId` > `text` > `contentDescription`.
|
|
323
|
-
- A proposed step only includes `activity.before`, never `activity.after`.
|
|
324
|
-
The Core determines `after` from live device observation.
|
|
325
|
-
- Temp files are cleaned up after each step and at the end of the session.
|
|
326
|
-
|
|
327
|
-
## Gotchas
|
|
328
|
-
|
|
329
|
-
- `packageName` comes from `applicationId` in `build.gradle(.kts)`, NOT
|
|
330
|
-
from the `package` attribute in `AndroidManifest.xml` (deprecated in
|
|
331
|
-
AGP 7+). `namespace` is for R class generation and may differ from
|
|
332
|
-
`applicationId`. If `applicationId` is a variable reference (e.g.,
|
|
333
|
-
`gradle.ext.buildApplicationId`), trace it through `gradle.properties`
|
|
334
|
-
and any `.gradle` config files to find the actual string value. Include
|
|
335
|
-
all files in the resolution chain in `manifest.files`.
|
|
336
|
-
- The `resourceId` in locators is the bare name without the `id/` prefix
|
|
337
|
-
(e.g., `open_search`, not `id/open_search`).
|
|
338
|
-
- The same `@+id/submit` can appear in multiple layout XML files — this is
|
|
339
|
-
normal, not a conflict. Only one layout is active at runtime; always
|
|
340
|
-
match against the `observe` snapshot, not static XML.
|
|
341
|
-
- `activity.after` is NOT included in proposed steps. The Core determines
|
|
342
|
-
it from live observation. Including it will cause validation failure.
|
|
343
|
-
- `inputText` steps do not include a `locator` — the Core uses the
|
|
344
|
-
currently focused element.
|
|
345
|
-
- `confirmationRequired` steps must be approved by a human in a TTY
|
|
346
|
-
terminal. The agent must NOT auto-approve.
|
|
347
|
-
- `confirmationRequiredActions` in the interaction policy is
|
|
348
|
-
per-action-TYPE, not per-element. Listing `click` means EVERY click in
|
|
349
|
-
the app requires human approval during generation. Leave empty unless
|
|
350
|
-
ALL instances of that action are genuinely dangerous. The Core risk
|
|
351
|
-
evaluator handles per-step risk assessment at runtime.
|
|
352
|
-
- If `context status` returns `"stale"`, the Context must be regenerated
|
|
353
|
-
before starting a new generation session. A stale Context will cause
|
|
354
|
-
`generation start` to fail with `CONTEXT_STALE`.
|
|
355
|
-
- `finalize` performs a full replay from scratch (forceStop, relaunch).
|
|
356
|
-
TapHound does not build or install the APK; ensure the app is installed
|
|
357
|
-
before calling `finalize`. It is not incremental. Do not call it until
|
|
358
|
-
all steps are complete.
|
|
359
|
-
- **Context completeness is critical**: the Context must include ALL
|
|
360
|
-
Activity source files and their layouts across ALL modules. If the AI
|
|
361
|
-
only scans a few files, the Context is useless for staleness detection
|
|
362
|
-
and the AI will not know about screens it missed. Use shell commands
|
|
363
|
-
(`find . -name AndroidManifest.xml -not -path "*/build/*"`) to
|
|
364
|
-
systematically discover all modules and Activities.
|
|
365
|
-
- `settings.gradle` may use custom functions like `includeModule()` that
|
|
366
|
-
dynamically include modules. Parsing `include` statements alone will
|
|
367
|
-
miss these. Use `./gradlew projects` or `find . -name "build.gradle"
|
|
368
|
-
-not -path "*/build/*"` as a filesystem fallback.
|
|
369
|
-
- `context status` only detects content changes to files already listed
|
|
370
|
-
in the Context. It does NOT detect new files added to the project (new
|
|
371
|
-
Activities, new layouts, new modules). Always run a structural count
|
|
372
|
-
comparison before reusing a Context.
|
|
373
|
-
- During generation, if `observe` returns unexpected elements or
|
|
374
|
-
Activities not known from the Context, the Context may be stale. Note
|
|
375
|
-
the discrepancy, adapt to the live state, and recommend a Context
|
|
376
|
-
update after the session. Do NOT abort unless the error is
|
|
377
|
-
unrecoverable.
|