taphound 0.2.0-dev.1 → 0.2.0-dev.12
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 +507 -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 +578 -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 +357 -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 +42 -0
- package/dist/adapters/appium/appium-ui-snapshot-provider.js +309 -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/diagnostics-journal.d.ts +17 -0
- package/dist/adapters/filesystem/diagnostics-journal.js +130 -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/diagnostics/diagnostics-exporter.d.ts +29 -0
- package/dist/application/diagnostics/diagnostics-exporter.js +283 -0
- package/dist/application/diagnostics/ui-capture-telemetry.d.ts +16 -0
- package/dist/application/diagnostics/ui-capture-telemetry.js +81 -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.d.ts +5 -0
- package/dist/application/report/report-writer.js +17 -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 +577 -175
- 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/observed-ui-snapshot-provider.d.ts +15 -0
- package/dist/application/ui/observed-ui-snapshot-provider.js +66 -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 +9 -0
- package/dist/application/ui/ui-stability-probe.js +24 -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 +201 -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/diagnose.d.ts +3 -0
- package/dist/cli/commands/diagnose.js +84 -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 +326 -64
- package/dist/cli/dependencies.d.ts +136 -1
- package/dist/cli/dependencies.js +504 -52
- package/dist/cli/diagnostics-recorder.d.ts +31 -0
- package/dist/cli/diagnostics-recorder.js +82 -0
- package/dist/cli/diff-verification.d.ts +41 -0
- package/dist/cli/diff-verification.js +192 -0
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +107 -2
- package/dist/cli/output.d.ts +5 -3
- package/dist/cli/output.js +12 -0
- package/dist/cli/program.js +21 -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/diagnostics.d.ts +1396 -0
- package/dist/domain/diagnostics.js +193 -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/verify-receipt.d.ts +17 -0
- package/dist/domain/verify-receipt.js +17 -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 +30 -0
- package/dist/domain/workspace.js +74 -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/diagnostics.d.ts +15 -0
- package/dist/ports/diagnostics.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 +7 -2
- 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
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
# TapHound Context Author Usage Guide
|
|
2
|
+
|
|
3
|
+
This guide describes how to use an AI agent (Droid, Claude Code, Cursor,
|
|
4
|
+
etc.) to generate and maintain a TapHound Project Context Bundle for an
|
|
5
|
+
Android project.
|
|
6
|
+
|
|
7
|
+
## Architecture Overview
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
User requests Context generation or update
|
|
11
|
+
|
|
|
12
|
+
v
|
|
13
|
+
+-----------------------------+
|
|
14
|
+
| One-time setup (first run |
|
|
15
|
+
| or after major changes) |
|
|
16
|
+
| AI analyzes source -> |
|
|
17
|
+
| Project Context Bundle |
|
|
18
|
+
| taphound context validate |
|
|
19
|
+
+-------------+---------------+
|
|
20
|
+
| Context reused
|
|
21
|
+
v
|
|
22
|
+
+-----------------------------+
|
|
23
|
+
| Consumed by downstream |
|
|
24
|
+
| skills (do not own Context):|
|
|
25
|
+
| - taphound-journey-generator |
|
|
26
|
+
| - taphound-journey-brief- |
|
|
27
|
+
| author |
|
|
28
|
+
+-----------------------------+
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Project Context is generated once and reused. It only needs regeneration
|
|
32
|
+
when the project source changes significantly (see Section 5). The
|
|
33
|
+
downstream Skills (`taphound-journey-generator`, `taphound-journey-brief-author`)
|
|
34
|
+
require a valid Context and stop with an error when they encounter a stale
|
|
35
|
+
or invalid one — they never generate or repair Context themselves.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 1. Prerequisites
|
|
40
|
+
|
|
41
|
+
### 1.1 Environment Requirements
|
|
42
|
+
|
|
43
|
+
| Item | Requirement |
|
|
44
|
+
|------|-------------|
|
|
45
|
+
| Node.js | 22+ (avoid 23) |
|
|
46
|
+
| Android SDK | ADB (for `doctor` environment validation) |
|
|
47
|
+
| Device | NOT required for Context generation |
|
|
48
|
+
| App | Target APK already installed (for downstream Skills, not for this one) |
|
|
49
|
+
| TapHound | Cloned repo with `npm ci` installed |
|
|
50
|
+
|
|
51
|
+
### 1.2 Build TapHound
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cd /path/to/TapHound
|
|
55
|
+
npm ci
|
|
56
|
+
npm run build
|
|
57
|
+
npm link # Register global taphound command
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Verify the registration:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
taphound --help
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Should output `Usage: taphound` and list `doctor`, `context`, `project`
|
|
67
|
+
commands (among others).
|
|
68
|
+
|
|
69
|
+
> If you prefer not to register globally, you can use `npx taphound` or
|
|
70
|
+
> `node dist/cli/main.js` in place of `taphound` throughout this guide.
|
|
71
|
+
|
|
72
|
+
### 1.3 Environment Diagnostics
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
taphound doctor \
|
|
76
|
+
--project /path/to/android-project \
|
|
77
|
+
--json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
A device is NOT required for Context work. If `doctor` reports
|
|
81
|
+
`DEVICE_UNAVAILABLE`, that is acceptable for `context generate` and
|
|
82
|
+
`context refresh`. Confirm other checks pass.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 2. One-Time Setup: Generate Project Context
|
|
87
|
+
|
|
88
|
+
> Project Context describes the Android project's UI structure, element
|
|
89
|
+
> locators, and interaction policy. It is generated once, persisted in the
|
|
90
|
+
> project directory, and reused for every Journey generation and Brief
|
|
91
|
+
> authoring run. Only significant source changes require regeneration
|
|
92
|
+
> (see Section 5).
|
|
93
|
+
|
|
94
|
+
### 2.1 Load the Skill in Your AI Agent
|
|
95
|
+
|
|
96
|
+
Run `taphound init` to install the Skill into each agent's expected directory,
|
|
97
|
+
then load it in your AI agent tool. The entry file is `SKILL.md`. The method
|
|
98
|
+
depends on the tool:
|
|
99
|
+
|
|
100
|
+
- **Droid**: The Skill is auto-discovered from `.factory/skills/` in the
|
|
101
|
+
TapHound repo. Run `taphound init --agent droid` in other projects.
|
|
102
|
+
Invoke it with the Skill tool using `taphound-journey-brief-author`.
|
|
103
|
+
- **Claude Code**: Run `taphound init --agent claude` to install to
|
|
104
|
+
`.claude/skills/`, then invoke with the Skill tool.
|
|
105
|
+
- **Codex**: Run `taphound init --agent codex` to install to `.agents/skills/`.
|
|
106
|
+
- **Cursor**: Run `taphound init --agent cursor` to install to `.cursor/skills/`.
|
|
107
|
+
- **Other tools**: Run `taphound init --agent other` to install to
|
|
108
|
+
`.agents/skills/`, or have the agent read `SKILL.md` directly.
|
|
109
|
+
|
|
110
|
+
### 2.2 Have the AI Analyze Project Source
|
|
111
|
+
|
|
112
|
+
Tell the AI agent (after the Skill is loaded, just provide the project
|
|
113
|
+
path):
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Generate a TapHound Project Context for the project at /path/to/android-project.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The AI agent will follow SKILL.md Phase 1 instructions and automatically
|
|
120
|
+
perform these steps:
|
|
121
|
+
|
|
122
|
+
1. Run `taphound context generate --project <project> --json` to discover
|
|
123
|
+
all modules (Core parses `settings.gradle`, falls back to filesystem
|
|
124
|
+
scanning), and identify the app module (the one with `applicationId`).
|
|
125
|
+
2. Read `applicationId` from the app module's `build.gradle` or
|
|
126
|
+
`build.gradle.kts` as the package name (Core resolves this; falls back
|
|
127
|
+
to the `package` attribute in the manifest for legacy projects).
|
|
128
|
+
3. Identify the launch Activity from the app module's `AndroidManifest.xml`
|
|
129
|
+
(library module Activities are merged in via manifest merge).
|
|
130
|
+
4. Analyze each module independently for Activities, click handlers, Logcat
|
|
131
|
+
tags, navigation, and layouts. Write one shard under
|
|
132
|
+
`.taphound/context/modules/` before moving to the next module.
|
|
133
|
+
5. Store reusable screen, element, transition, and Logcat semantics in each
|
|
134
|
+
shard. Core computes evidence hashes and the module inventory path-set
|
|
135
|
+
hash.
|
|
136
|
+
6. Mark every discovered module `complete`, `partial`, `unsupported`, or
|
|
137
|
+
`notAnalyzed`; never silently omit a module because the project is large.
|
|
138
|
+
7. Hash each completed shard and write the compact root index matching
|
|
139
|
+
`schemas/project-context.json`.
|
|
140
|
+
|
|
141
|
+
> **Multi-module note**: Activities may be distributed across library/feature
|
|
142
|
+
> modules, and layout XML may be in any module's `res/layout/`. The AI agent
|
|
143
|
+
> uses Core's module discovery to get the authoritative module list. The
|
|
144
|
+
> root index stays small; detailed semantics are loaded from selected
|
|
145
|
+
> shards.
|
|
146
|
+
|
|
147
|
+
### 2.3 Write and Validate Context
|
|
148
|
+
|
|
149
|
+
The AI-generated Bundle is written to:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
<project>/.taphound/context/
|
|
153
|
+
├── project-context.json
|
|
154
|
+
└── modules/
|
|
155
|
+
├── app.json
|
|
156
|
+
└── feature-search.json
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Then validate:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
taphound context validate \
|
|
163
|
+
--project /path/to/android-project \
|
|
164
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
165
|
+
--json
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Success**: `"status": "valid"`, exit 0. Context is ready.
|
|
169
|
+
|
|
170
|
+
**Failure**: Fix based on the error message. Common causes:
|
|
171
|
+
|
|
172
|
+
| Error | Cause | Fix |
|
|
173
|
+
|-------|-------|-----|
|
|
174
|
+
| `CONTEXT_INVALID` | Package name / Activity mismatch | Check against AndroidManifest.xml |
|
|
175
|
+
| `CONTEXT_INVALID` | Incorrect SHA-256 | Run `context rehash` |
|
|
176
|
+
| `CONTEXT_INVALID` | Path contains `..` or starts with `/` | Use project-relative paths |
|
|
177
|
+
| `CONTEXT_STALE` | File content does not match hash | Source changed, run `context refresh` or rehash |
|
|
178
|
+
|
|
179
|
+
### 2.4 Check Context Status (Optional)
|
|
180
|
+
|
|
181
|
+
You can check whether the Context is still valid at any time:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
taphound context status \
|
|
185
|
+
--project /path/to/android-project \
|
|
186
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
187
|
+
--json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Returns `"valid"` (still valid), `"stale"` (files changed, needs update),
|
|
191
|
+
or `"invalid"` (structural error).
|
|
192
|
+
|
|
193
|
+
List the compact module catalog without loading all shards:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
taphound context list \
|
|
197
|
+
--project /path/to/android-project \
|
|
198
|
+
--context .taphound/context/project-context.json \
|
|
199
|
+
--json
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 2.5 Context Persistence
|
|
203
|
+
|
|
204
|
+
The generated `project-context.json` is saved in the project's
|
|
205
|
+
`.taphound/context/` directory. This file can be:
|
|
206
|
+
|
|
207
|
+
- **Committed to Git**: If the project source is stable, the Context can
|
|
208
|
+
be tracked as a project artifact.
|
|
209
|
+
- **Added to .gitignore**: If the project changes frequently, regenerate
|
|
210
|
+
dynamically before each run.
|
|
211
|
+
|
|
212
|
+
Recommendation: commit to Git after first generation, update per Section 5
|
|
213
|
+
when source changes.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 3. Full Regeneration (Structural Changes)
|
|
218
|
+
|
|
219
|
+
When a new Gradle module is added or the Bundle is `invalid`, update the
|
|
220
|
+
module catalog and generate only missing or invalid shards:
|
|
221
|
+
|
|
222
|
+
1. Have the AI agent re-analyze the source (reads `prompts/analyze-project.md`)
|
|
223
|
+
2. Run `context generate --force` to overwrite the existing Context:
|
|
224
|
+
```bash
|
|
225
|
+
taphound context generate \
|
|
226
|
+
--project /path/to/android-project \
|
|
227
|
+
--force \
|
|
228
|
+
--json
|
|
229
|
+
```
|
|
230
|
+
3. Re-discover all modules via Core (parses `settings.gradle`)
|
|
231
|
+
4. Add every discovered module to the root index with explicit status
|
|
232
|
+
5. Generate each new/invalid module shard independently (Section 2.2 steps 4–6)
|
|
233
|
+
6. Recompute affected shard hashes and global interaction policy
|
|
234
|
+
7. Rewrite the root index
|
|
235
|
+
8. Validate with `context validate`
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# In the AI agent:
|
|
239
|
+
# "Regenerate the TapHound Project Context for /path/to/android-project.
|
|
240
|
+
# The source has been updated with new screens and layouts.
|
|
241
|
+
# Run a full re-analysis per prompts/analyze-project.md."
|
|
242
|
+
|
|
243
|
+
taphound context validate \
|
|
244
|
+
--project /path/to/android-project \
|
|
245
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
246
|
+
--json
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 4. Complete Example: Generating Context for the Demo Project
|
|
252
|
+
|
|
253
|
+
Using `examples/taphound-android-demo` as the project.
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# In the AI agent:
|
|
257
|
+
# "Generate a TapHound Project Context for examples/taphound-android-demo"
|
|
258
|
+
# AI analyzes source and generates:
|
|
259
|
+
# examples/taphound-android-demo/.taphound/context/project-context.json
|
|
260
|
+
|
|
261
|
+
# Validate
|
|
262
|
+
taphound context validate \
|
|
263
|
+
--project examples/taphound-android-demo \
|
|
264
|
+
--context .taphound/context/project-context.json \
|
|
265
|
+
--json
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The Context is now ready for downstream Skills (`taphound-journey-generator`,
|
|
269
|
+
`taphound-journey-brief-author`) to consume.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 5. Updating Project Context
|
|
274
|
+
|
|
275
|
+
Android projects evolve continuously: buttons are added, layouts are
|
|
276
|
+
restructured, Activities come and go. The Context needs to track these
|
|
277
|
+
changes to remain useful for staleness detection and interaction policy.
|
|
278
|
+
|
|
279
|
+
There are three levels of update, from lightest to heaviest:
|
|
280
|
+
|
|
281
|
+
### 5.1 Pre-Session Check (Before Every Downstream Skill Run)
|
|
282
|
+
|
|
283
|
+
Run this before each Journey generation or Brief authoring session to
|
|
284
|
+
decide which update level is needed.
|
|
285
|
+
|
|
286
|
+
**Step 1: Hash staleness check**
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
taphound context status \
|
|
290
|
+
--project /path/to/android-project \
|
|
291
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
292
|
+
--json
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
- `"valid"`: All tracked file hashes match. Proceed to Step 2.
|
|
296
|
+
- `"stale"`: Some tracked files changed. Needs at least an incremental
|
|
297
|
+
update (Section 5.2).
|
|
298
|
+
- `"invalid"`: Context structure is broken. Needs full regeneration
|
|
299
|
+
(Section 3).
|
|
300
|
+
|
|
301
|
+
**Step 2: Module completeness check**
|
|
302
|
+
|
|
303
|
+
Module inventory path-set hashes include manifest, source, layout, and
|
|
304
|
+
navigation paths. `context status` therefore detects files added or removed
|
|
305
|
+
inside an existing module. Root project evidence detects changes to the
|
|
306
|
+
Gradle module catalog. Also run `context list --json` and ensure every module
|
|
307
|
+
is explicitly `complete` or `unsupported` — `unsupported` is an analyzed
|
|
308
|
+
verdict ("no UI-relevant surfaces") and a legitimate terminal state that
|
|
309
|
+
generation accepts. `partial` and `notAnalyzed` are coverage gaps, not
|
|
310
|
+
successful full generation.
|
|
311
|
+
|
|
312
|
+
**Decision matrix:**
|
|
313
|
+
|
|
314
|
+
| `context status` | Module catalog | Action |
|
|
315
|
+
|------------------|----------------|--------|
|
|
316
|
+
| `valid` | All selected modules `complete` or `unsupported` | Context is current. Proceed. |
|
|
317
|
+
| `valid` | Any module `partial` or `notAnalyzed` | Complete that module shard |
|
|
318
|
+
| `stale` | Existing module changed | Run `context refresh --json`, then act on each block's `resolution` (see 5.2) |
|
|
319
|
+
| `stale` | Module catalog changed | Update index and generate new shards (Section 3) |
|
|
320
|
+
| `invalid` | — | Repair or regenerate Bundle (Section 3) |
|
|
321
|
+
|
|
322
|
+
### 5.2 Incremental Update (Content-Only Changes)
|
|
323
|
+
|
|
324
|
+
**Step 0: Hash-only refresh**
|
|
325
|
+
|
|
326
|
+
Before any re-analysis, let TapHound recompute hashes:
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
taphound context refresh \
|
|
330
|
+
--project /path/to/android-project \
|
|
331
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
332
|
+
--json
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
- `"refreshed"` / `"unchanged"`: nothing semantic changed. `semanticSha256`
|
|
336
|
+
values are backfilled, formatting- or comment-only edits are rehashed,
|
|
337
|
+
drifted shard hashes in the index are repaired, and the Context is current.
|
|
338
|
+
- `"blocked"`: the response lists the modules and files that changed
|
|
339
|
+
semantically, whose inventory changed, or whose evidence is missing. Each
|
|
340
|
+
block carries a `resolution` field — act on it, do not blanket re-analyze:
|
|
341
|
+
|
|
342
|
+
| block `code` | `resolution` | Action |
|
|
343
|
+
|---|---|---|
|
|
344
|
+
| `EVIDENCE_UNRESOLVED` | `pruneDeleted` | A tracked file was deleted. Re-run with `--prune-deleted` (drops the entry). Combine with `--accept-source-changes` if inventory also drifted. |
|
|
345
|
+
| `EVIDENCE_SEMANTIC_CHANGED` | `acceptSourceChanges` | A tracked file's semantics changed. Re-run with `--accept-source-changes` to rehash. Re-analyze (below) only if the module summary is now wrong. |
|
|
346
|
+
| `MODULE_INVENTORY_CHANGED` | `acceptSourceChanges` | The on-disk file set grew or shrank. Re-run with `--accept-source-changes` to accept the new inventory hash. Re-analyze only when new UI files were added that the summary must cover. |
|
|
347
|
+
| `EVIDENCE_UNRESOLVED` | `reanalyze` | An evidence file is unreadable/escaped/too large (not a clean deletion). Fix the file or regenerate that module's shard (below). |
|
|
348
|
+
|
|
349
|
+
The typical one-shot reconcile for routine edits + deletions:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
taphound context refresh \
|
|
353
|
+
--project /path/to/android-project \
|
|
354
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
355
|
+
--prune-deleted --accept-source-changes --json
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
`--module <id...>` narrows the scope. `--accept-source-changes` rehashes
|
|
359
|
+
semantic and inventory drift; use it only after confirming the recorded module
|
|
360
|
+
summary (screens, elements, transitions, Logcat) is still accurate, because
|
|
361
|
+
`refresh` never updates semantics. `--prune-deleted` only drops entries for
|
|
362
|
+
files that are truly gone (`notFound`); unreadable or escaped files stay
|
|
363
|
+
blocked as `reanalyze`.
|
|
364
|
+
|
|
365
|
+
When a block's `resolution` is `reanalyze`, or when `acceptSourceChanges`
|
|
366
|
+
would hide newly added UI screens the Goal may reach, regenerate the affected
|
|
367
|
+
module shards instead of reanalyzing unrelated features:
|
|
368
|
+
|
|
369
|
+
1. Identify which files changed (the `context status` output lists them).
|
|
370
|
+
2. Recompute SHA-256 for each changed file.
|
|
371
|
+
3. If any changed file is an Activity source, re-read it to check for:
|
|
372
|
+
- New Logcat tags (affects `expect` candidates)
|
|
373
|
+
- New click handlers or input fields (affects `interactionPolicy`)
|
|
374
|
+
- New `startActivity` calls (affects navigation understanding)
|
|
375
|
+
4. If any changed file is a layout XML, re-read it to check for:
|
|
376
|
+
- New `android:id` elements (new locator candidates)
|
|
377
|
+
- Removed elements (locators that no longer exist)
|
|
378
|
+
- Changed `android:text` or `android:contentDescription`
|
|
379
|
+
5. Update shard semantics, evidence, and inventory. Write the shard,
|
|
380
|
+
recompute its file hash, and update the root index reference.
|
|
381
|
+
6. Update the global `interactionPolicy` only when needed, then validate:
|
|
382
|
+
```bash
|
|
383
|
+
taphound context validate \
|
|
384
|
+
--project /path/to/android-project \
|
|
385
|
+
--context /path/to/android-project/.taphound/context/project-context.json \
|
|
386
|
+
--json
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
This is fast because it only touches changed files, not the entire
|
|
390
|
+
project.
|
|
391
|
+
|
|
392
|
+
### 5.3 Signs of Stale Context During Downstream Generation
|
|
393
|
+
|
|
394
|
+
Sometimes the pre-session check passes but the Context is still outdated
|
|
395
|
+
(e.g., a layout's content changed without changing the file count). The
|
|
396
|
+
downstream Skills may encounter these signs during generation:
|
|
397
|
+
|
|
398
|
+
| Sign | Likely cause | Action |
|
|
399
|
+
|------|-------------|--------|
|
|
400
|
+
| `observe` shows elements not expected from Context | Layout changed (new elements) | Continue if the element is actionable; update Context after session |
|
|
401
|
+
| `observe` shows a different Activity than expected | New Activity added or navigation changed | Re-observe and adapt; update Context after session |
|
|
402
|
+
| `LOCATOR_NOT_FOUND` for an element that should exist | Element was removed or `android:id` changed | Re-observe, try alternative locator; update Context after session |
|
|
403
|
+
| `LOCATOR_AMBIGUOUS` for a previously unique element | Duplicate ID added in another layout | Use more specific locator; update Context after session |
|
|
404
|
+
| Logcat expectation fails | Log tag or message pattern changed | Check source, update expectation; update Context after session |
|
|
405
|
+
|
|
406
|
+
> When any of these signs appear, the downstream Skill should note the
|
|
407
|
+
> discrepancy and recommend running this Skill (`taphound-journey-brief-author`)
|
|
408
|
+
> to update the Context after the session completes. It should NOT abort
|
|
409
|
+
> the session unless the error is unrecoverable.
|
|
410
|
+
|
|
411
|
+
### 5.4 When to Update
|
|
412
|
+
|
|
413
|
+
| Change type | Update level |
|
|
414
|
+
|-------------|-------------|
|
|
415
|
+
| Modified button text or content description | Incremental (re-hash) |
|
|
416
|
+
| Modified click handler logic | Incremental (re-hash, check Logcat tags) |
|
|
417
|
+
| Added/removed `android:id` in existing layout | Incremental (re-hash) |
|
|
418
|
+
| Added new Activity | Full regeneration |
|
|
419
|
+
| Removed Activity | Full regeneration |
|
|
420
|
+
| Added/removed layout XML file | Full regeneration |
|
|
421
|
+
| New module added (`settings.gradle` changed) | Full regeneration |
|
|
422
|
+
| Changed `applicationId` | Full regeneration |
|
|
423
|
+
| Modified `<include>`/`<merge>` structure | Incremental (re-hash) |
|
|
424
|
+
| Modified business logic but UI unchanged | Incremental (re-hash only) |
|
|
425
|
+
| Modified themes/styles | No update needed |
|
|
426
|
+
| Modified Gradle dependency versions | No update needed (unless package name changed) |
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## 6. Failure Troubleshooting
|
|
431
|
+
|
|
432
|
+
### 6.1 context generate Failures
|
|
433
|
+
|
|
434
|
+
| Error | Cause | Fix |
|
|
435
|
+
|-------|-------|-----|
|
|
436
|
+
| `CONFIG_INVALID` | `.taphound/config.json` missing or invalid | Run `taphound init` first, or fix config |
|
|
437
|
+
| Module discovery fails | `settings.gradle` not found | Ensure project root is correct |
|
|
438
|
+
| `applicationId` not found | Build file missing or malformed | Check `build.gradle(.kts)` |
|
|
439
|
+
|
|
440
|
+
### 6.2 context validate Failures
|
|
441
|
+
|
|
442
|
+
| Error | Cause | Fix |
|
|
443
|
+
|-------|-------|-----|
|
|
444
|
+
| `CONTEXT_INVALID` | Package name / Activity mismatch | Check against AndroidManifest.xml |
|
|
445
|
+
| `CONTEXT_INVALID` | Incorrect SHA-256 | Run `context rehash` |
|
|
446
|
+
| `CONTEXT_INVALID` | Path contains `..` or starts with `/` | Use project-relative paths |
|
|
447
|
+
| `CONTEXT_STALE` | File content does not match hash | Source changed, run `context refresh` |
|
|
448
|
+
|
|
449
|
+
### 6.3 context refresh Failures
|
|
450
|
+
|
|
451
|
+
| Error | Cause | Fix |
|
|
452
|
+
|-------|-------|-----|
|
|
453
|
+
| `blocked` with `reanalyze` | Evidence file unreadable/escaped | Fix file or regenerate shard |
|
|
454
|
+
| `blocked` with `MODULE_INVENTORY_CHANGED` | Files added or removed | Run with `--accept-source-changes`, or re-analyze if new UI files |
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## 7. Safety Constraints
|
|
459
|
+
|
|
460
|
+
- The AI agent NEVER computes SHA-256 hashes manually. Core does all
|
|
461
|
+
hashing via `context generate`, `context rehash`, and `context refresh`.
|
|
462
|
+
- The AI agent NEVER discovers modules manually. Core parses
|
|
463
|
+
`settings.gradle` and falls back to filesystem scanning.
|
|
464
|
+
- The AI agent NEVER resolves `applicationId` or launch Activity manually.
|
|
465
|
+
Core inspects build files and manifests.
|
|
466
|
+
- This Skill does NOT modify device state. It does NOT use `generation`,
|
|
467
|
+
`verify`, `record`, `observe`, or `align`.
|
|
468
|
+
- The generated Context is the authoritative input for downstream Skills.
|
|
469
|
+
A stale or invalid Context stops Journey generation and Brief authoring.
|
|
470
|
+
- Real-device acceptance is fully separate from the normal test suite and
|
|
471
|
+
does NOT run in `npm test`.
|