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.
Files changed (467) hide show
  1. package/README.md +49 -149
  2. package/README.zh-CN.md +47 -147
  3. package/assets/skills/taphound-case-suite/SKILL.md +363 -0
  4. package/assets/skills/taphound-case-suite/schemas/base-flow-record.schema.json +22 -0
  5. package/assets/skills/taphound-case-suite/schemas/case-catalog.schema.json +26 -0
  6. package/assets/skills/taphound-case-suite/schemas/case-ledger.schema.json +158 -0
  7. package/assets/skills/taphound-case-suite/schemas/suite-input.schema.json +41 -0
  8. package/assets/skills/taphound-case-suite/schemas/transition.schema.json +61 -0
  9. package/assets/skills/taphound-case-suite/scripts/ledger.mjs +1207 -0
  10. package/assets/skills/taphound-case-suite/templates/base-flow-record.example.json +20 -0
  11. package/assets/skills/taphound-case-suite/templates/suite-input.example.json +27 -0
  12. package/assets/skills/taphound-case-suite/templates/transition.example.json +8 -0
  13. package/assets/skills/taphound-flash/SKILL.md +115 -0
  14. package/assets/skills/taphound-flash/scripts/flash.mjs +585 -0
  15. package/assets/skills/taphound-flash/templates/flash-plan.example.json +15 -0
  16. package/assets/skills/taphound-journey-brief-author/CONTEXT-GUIDE.md +471 -0
  17. package/assets/skills/taphound-journey-brief-author/SKILL.md +494 -0
  18. package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.md +96 -0
  19. package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.zh-CN.md +80 -0
  20. package/assets/skills/taphound-journey-brief-author/prompts/context-analyze-project.md +309 -0
  21. package/assets/skills/taphound-journey-brief-author/schemas/context-refresh-result.json +123 -0
  22. package/assets/skills/taphound-journey-brief-author/schemas/project-context-module.json +192 -0
  23. package/assets/skills/taphound-journey-brief-author/schemas/project-context.json +152 -0
  24. package/assets/skills/taphound-journey-brief-author/templates/project-context-module.example.json +58 -0
  25. package/assets/skills/taphound-journey-brief-author/templates/project-context.example.json +51 -0
  26. package/assets/skills/taphound-journey-brief-author/templates/taphound-journey-brief.template.md +63 -0
  27. package/assets/skills/taphound-journey-generator/SKILL.md +507 -0
  28. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/prompts/check-completion.md +3 -0
  29. package/assets/skills/taphound-journey-generator/prompts/consume-journey-brief.md +52 -0
  30. package/assets/skills/taphound-journey-generator/prompts/generate-step.md +211 -0
  31. package/assets/skills/taphound-journey-generator/prompts/select-flow.md +91 -0
  32. package/assets/skills/taphound-journey-generator/references/bridge.md +35 -0
  33. package/assets/skills/taphound-journey-generator/references/mid-session.md +44 -0
  34. package/assets/skills/taphound-journey-generator/schemas/external-flow.json +37 -0
  35. package/assets/skills/taphound-journey-generator/schemas/flow.json +28 -0
  36. package/assets/skills/taphound-journey-generator/schemas/journey-source.json +25 -0
  37. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/observe-output.json +13 -4
  38. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/proposed-step-envelope.json +127 -5
  39. package/assets/skills/taphound-journey-generator/scripts/envelope.mjs +578 -0
  40. package/assets/skills/taphound-journey-generator/templates/external-flow.example.json +22 -0
  41. package/assets/skills/taphound-journey-generator/templates/flow.example.json +22 -0
  42. package/assets/skills/taphound-journey-generator/templates/journey-source.example.json +17 -0
  43. package/assets/skills/taphound-journey-generator/templates/taphound-journey-brief.example.md +70 -0
  44. package/assets/skills/taphound-verify-change/SKILL.md +91 -0
  45. package/assets/skills/taphound-verify-change/references/accept.md +38 -0
  46. package/assets/skills/taphound-verify-change/references/preserve.md +357 -0
  47. package/assets/skills/taphound-verify-change/schemas/workflow-manifest.schema.json +295 -0
  48. package/assets/skills/taphound-verify-change/scripts/handoff.mjs +482 -0
  49. package/assets/skills/taphound-verify-change/scripts/ui-refactor.mjs +505 -0
  50. package/dist/adapters/adb/adb-adapter.d.ts +16 -2
  51. package/dist/adapters/adb/adb-adapter.js +199 -0
  52. package/dist/adapters/adb/system-uiautomator-snapshot-provider.d.ts +13 -0
  53. package/dist/adapters/adb/system-uiautomator-snapshot-provider.js +122 -0
  54. package/dist/adapters/adb/ui-automator-parser.d.ts +3 -0
  55. package/dist/adapters/adb/ui-automator-parser.js +160 -0
  56. package/dist/adapters/adb/window-topology-parser.d.ts +2 -0
  57. package/dist/adapters/adb/window-topology-parser.js +101 -0
  58. package/dist/adapters/android-cli/android-cli-adapter.d.ts +16 -8
  59. package/dist/adapters/android-cli/android-cli-adapter.js +137 -15
  60. package/dist/adapters/android-cli/android-cli-snapshot-provider.d.ts +9 -0
  61. package/dist/adapters/android-cli/android-cli-snapshot-provider.js +99 -0
  62. package/dist/adapters/android-cli/layout-parser.js +12 -8
  63. package/dist/adapters/appium/appium-doctor.d.ts +7 -0
  64. package/dist/adapters/appium/appium-doctor.js +128 -0
  65. package/dist/adapters/appium/appium-ui-snapshot-provider.d.ts +42 -0
  66. package/dist/adapters/appium/appium-ui-snapshot-provider.js +309 -0
  67. package/dist/adapters/camera/camera-probe-adapter.d.ts +18 -0
  68. package/dist/adapters/camera/camera-probe-adapter.js +286 -0
  69. package/dist/adapters/filesystem/artifact-store.js +40 -1
  70. package/dist/adapters/filesystem/context-document-writer.d.ts +15 -0
  71. package/dist/adapters/filesystem/context-document-writer.js +112 -0
  72. package/dist/adapters/filesystem/diagnostics-journal.d.ts +17 -0
  73. package/dist/adapters/filesystem/diagnostics-journal.js +130 -0
  74. package/dist/adapters/filesystem/external-flow-registry.d.ts +17 -0
  75. package/dist/adapters/filesystem/external-flow-registry.js +325 -0
  76. package/dist/adapters/filesystem/generation-session-store.d.ts +17 -11
  77. package/dist/adapters/filesystem/generation-session-store.js +281 -855
  78. package/dist/adapters/filesystem/generation-store/session-lock.d.ts +29 -0
  79. package/dist/adapters/filesystem/generation-store/session-lock.js +202 -0
  80. package/dist/adapters/filesystem/generation-store/session-transitions.d.ts +24 -0
  81. package/dist/adapters/filesystem/generation-store/session-transitions.js +340 -0
  82. package/dist/adapters/filesystem/generation-store/store-files.d.ts +50 -0
  83. package/dist/adapters/filesystem/generation-store/store-files.js +363 -0
  84. package/dist/adapters/filesystem/journey-composition-store.d.ts +23 -0
  85. package/dist/adapters/filesystem/journey-composition-store.js +151 -0
  86. package/dist/adapters/filesystem/knowledge-registry.d.ts +12 -0
  87. package/dist/adapters/filesystem/knowledge-registry.js +223 -0
  88. package/dist/adapters/filesystem/project-bound-file.js +3 -5
  89. package/dist/adapters/filesystem/project-file-inspector.d.ts +2 -0
  90. package/dist/adapters/filesystem/project-file-inspector.js +57 -28
  91. package/dist/adapters/filesystem/project-identity-inspector.d.ts +7 -0
  92. package/dist/adapters/filesystem/project-identity-inspector.js +215 -0
  93. package/dist/adapters/filesystem/project-inventory-inspector.d.ts +8 -0
  94. package/dist/adapters/filesystem/project-inventory-inspector.js +93 -0
  95. package/dist/adapters/filesystem/project-module-discoverer.d.ts +6 -0
  96. package/dist/adapters/filesystem/project-module-discoverer.js +158 -0
  97. package/dist/adapters/filesystem/skill-installer.d.ts +7 -2
  98. package/dist/adapters/filesystem/skill-installer.js +40 -11
  99. package/dist/adapters/filesystem/workspace-layout.d.ts +7 -0
  100. package/dist/adapters/filesystem/workspace-layout.js +57 -0
  101. package/dist/adapters/git/node-git-diff.d.ts +17 -0
  102. package/dist/adapters/git/node-git-diff.js +114 -0
  103. package/dist/adapters/process/node-detached-process-launcher.d.ts +6 -0
  104. package/dist/adapters/process/node-detached-process-launcher.js +96 -0
  105. package/dist/adapters/process/node-process-runner.js +11 -2
  106. package/dist/adapters/prompt/inquirer-align-prompt.d.ts +27 -0
  107. package/dist/adapters/prompt/inquirer-align-prompt.js +65 -0
  108. package/dist/adapters/prompt/inquirer-generation-prompt.js +3 -0
  109. package/dist/adapters/prompt/inquirer-recorder-prompt.d.ts +9 -1
  110. package/dist/adapters/prompt/inquirer-recorder-prompt.js +63 -0
  111. package/dist/adapters/runtime/adb-runtime-backend.d.ts +67 -0
  112. package/dist/adapters/runtime/adb-runtime-backend.js +206 -0
  113. package/dist/adapters/runtime/fake-runtime-backend.d.ts +87 -0
  114. package/dist/adapters/runtime/fake-runtime-backend.js +240 -0
  115. package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.d.ts +45 -0
  116. package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.js +153 -0
  117. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.d.ts +23 -0
  118. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.js +39 -0
  119. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.d.ts +20 -0
  120. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.js +180 -0
  121. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.d.ts +78 -0
  122. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.js +379 -0
  123. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-tools.d.ts +46 -0
  124. package/dist/adapters/runtime/session-adb-view.d.ts +53 -0
  125. package/dist/adapters/runtime/session-adb-view.js +193 -0
  126. package/dist/adapters/runtime/session-backed-ports.d.ts +21 -0
  127. package/dist/adapters/runtime/session-backed-ports.js +43 -0
  128. package/dist/adapters/runtime/shared-session-runtime-backend.d.ts +12 -0
  129. package/dist/adapters/runtime/shared-session-runtime-backend.js +64 -0
  130. package/dist/adapters/ui/auto-ui-snapshot-provider.d.ts +8 -0
  131. package/dist/adapters/ui/auto-ui-snapshot-provider.js +48 -0
  132. package/dist/adapters/ui/device-layout-temp.d.ts +6 -0
  133. package/dist/adapters/ui/device-layout-temp.js +18 -0
  134. package/dist/adapters/ui/device-ui-environment.d.ts +13 -0
  135. package/dist/adapters/ui/device-ui-environment.js +81 -0
  136. package/dist/adapters/ui/layout-normalization.d.ts +9 -0
  137. package/dist/adapters/ui/layout-normalization.js +44 -0
  138. package/dist/adapters/ui/ui-snapshot-error.d.ts +11 -0
  139. package/dist/adapters/ui/ui-snapshot-error.js +12 -0
  140. package/dist/adapters/ui/ui-snapshot-support.d.ts +15 -0
  141. package/dist/adapters/ui/ui-snapshot-support.js +12 -0
  142. package/dist/application/align/align-service.d.ts +42 -0
  143. package/dist/application/align/align-service.js +106 -0
  144. package/dist/application/assertion/expectation-evaluator.d.ts +18 -5
  145. package/dist/application/assertion/expectation-evaluator.js +156 -18
  146. package/dist/application/assertion/guarded-expectation.d.ts +45 -0
  147. package/dist/application/assertion/guarded-expectation.js +74 -0
  148. package/dist/application/checkpoint/baseline-capturer.d.ts +26 -0
  149. package/dist/application/checkpoint/baseline-capturer.js +163 -0
  150. package/dist/application/checkpoint/baseline-error.d.ts +5 -0
  151. package/dist/application/checkpoint/baseline-error.js +8 -0
  152. package/dist/application/checkpoint/baseline-service.d.ts +31 -0
  153. package/dist/application/checkpoint/baseline-service.js +147 -0
  154. package/dist/application/checkpoint/checkpoint-evaluator.d.ts +35 -0
  155. package/dist/application/checkpoint/checkpoint-evaluator.js +415 -0
  156. package/dist/application/checkpoint/regression-comparator.d.ts +18 -0
  157. package/dist/application/checkpoint/regression-comparator.js +192 -0
  158. package/dist/application/collector/logcat-collector.d.ts +22 -1
  159. package/dist/application/collector/logcat-collector.js +103 -15
  160. package/dist/application/collector/logcat-event.d.ts +8 -0
  161. package/dist/application/collector/logcat-event.js +79 -0
  162. package/dist/application/collector/logcat-stop.d.ts +2 -0
  163. package/dist/application/collector/logcat-stop.js +11 -0
  164. package/dist/application/context/context-generator.d.ts +45 -0
  165. package/dist/application/context/context-generator.js +228 -0
  166. package/dist/application/context/context-loader.d.ts +40 -0
  167. package/dist/application/context/context-loader.js +223 -0
  168. package/dist/application/context/context-refresher.d.ts +59 -0
  169. package/dist/application/context/context-refresher.js +349 -0
  170. package/dist/application/context/context-rehasher.d.ts +36 -0
  171. package/dist/application/context/context-rehasher.js +110 -0
  172. package/dist/application/context/context-validator.d.ts +23 -1
  173. package/dist/application/context/context-validator.js +116 -9
  174. package/dist/application/context/evidence-hash.d.ts +1 -0
  175. package/dist/application/context/evidence-hash.js +125 -0
  176. package/dist/application/context/evidence-match.d.ts +9 -0
  177. package/dist/application/context/evidence-match.js +8 -0
  178. package/dist/application/context/shard-identity.d.ts +2 -0
  179. package/dist/application/context/shard-identity.js +7 -0
  180. package/dist/application/contract/contract-loader.d.ts +25 -0
  181. package/dist/application/contract/contract-loader.js +68 -0
  182. package/dist/application/contract/contract-review.d.ts +25 -0
  183. package/dist/application/contract/contract-review.js +51 -0
  184. package/dist/application/contract/contract-verifier.d.ts +53 -0
  185. package/dist/application/contract/contract-verifier.js +645 -0
  186. package/dist/application/devices/resolve-device-assignments.d.ts +21 -0
  187. package/dist/application/devices/resolve-device-assignments.js +60 -0
  188. package/dist/application/diagnosis/failure-classifier.d.ts +23 -0
  189. package/dist/application/diagnosis/failure-classifier.js +179 -0
  190. package/dist/application/diagnostics/diagnostics-exporter.d.ts +29 -0
  191. package/dist/application/diagnostics/diagnostics-exporter.js +283 -0
  192. package/dist/application/diagnostics/ui-capture-telemetry.d.ts +16 -0
  193. package/dist/application/diagnostics/ui-capture-telemetry.js +81 -0
  194. package/dist/application/doctor/doctor-service.d.ts +36 -3
  195. package/dist/application/doctor/doctor-service.js +255 -25
  196. package/dist/application/generation/generation-app-preparer.d.ts +20 -0
  197. package/dist/application/generation/generation-app-preparer.js +28 -0
  198. package/dist/application/generation/generation-config-service.d.ts +21 -0
  199. package/dist/application/generation/generation-config-service.js +53 -0
  200. package/dist/application/generation/generation-confirmation-service.d.ts +14 -3
  201. package/dist/application/generation/generation-confirmation-service.js +109 -24
  202. package/dist/application/generation/generation-context-snapshot.d.ts +6 -0
  203. package/dist/application/generation/generation-context-snapshot.js +29 -0
  204. package/dist/application/generation/generation-finalizer.d.ts +15 -9
  205. package/dist/application/generation/generation-finalizer.js +167 -70
  206. package/dist/application/generation/generation-publisher.js +12 -8
  207. package/dist/application/generation/generation-recovery-service.d.ts +35 -0
  208. package/dist/application/generation/generation-recovery-service.js +144 -0
  209. package/dist/application/generation/generation-reopen-service.d.ts +15 -0
  210. package/dist/application/generation/generation-reopen-service.js +37 -0
  211. package/dist/application/generation/generation-replace-service.d.ts +32 -0
  212. package/dist/application/generation/generation-replace-service.js +116 -0
  213. package/dist/application/generation/generation-starter.d.ts +44 -4
  214. package/dist/application/generation/generation-starter.js +175 -8
  215. package/dist/application/generation/generation-step-executor.d.ts +67 -5
  216. package/dist/application/generation/generation-step-executor.js +471 -108
  217. package/dist/application/generation/proposed-step-validator.js +96 -30
  218. package/dist/application/generation/replay-policy-loader.d.ts +16 -0
  219. package/dist/application/generation/replay-policy-loader.js +29 -0
  220. package/dist/application/generation/risk-evaluator.d.ts +4 -1
  221. package/dist/application/generation/risk-evaluator.js +118 -3
  222. package/dist/application/generation/runtime-observer.d.ts +39 -7
  223. package/dist/application/generation/runtime-observer.js +193 -24
  224. package/dist/application/impact/impact-resolver.d.ts +32 -0
  225. package/dist/application/impact/impact-resolver.js +160 -0
  226. package/dist/application/init/init-service.js +26 -13
  227. package/dist/application/interaction/action-executor.d.ts +3 -2
  228. package/dist/application/interaction/action-executor.js +11 -1
  229. package/dist/application/interaction/action-target.d.ts +17 -0
  230. package/dist/application/interaction/action-target.js +40 -0
  231. package/dist/application/interaction/external-step-runner.d.ts +153 -0
  232. package/dist/application/interaction/external-step-runner.js +332 -0
  233. package/dist/application/interaction/fallback-resolver.d.ts +6 -3
  234. package/dist/application/interaction/fallback-resolver.js +7 -5
  235. package/dist/application/interaction/scroll-to-executor.d.ts +17 -3
  236. package/dist/application/interaction/scroll-to-executor.js +118 -36
  237. package/dist/application/journey/external-flow-resolver.d.ts +25 -0
  238. package/dist/application/journey/external-flow-resolver.js +22 -0
  239. package/dist/application/journey/journey-check-service.d.ts +54 -0
  240. package/dist/application/journey/journey-check-service.js +207 -0
  241. package/dist/application/journey/journey-promoter.d.ts +26 -0
  242. package/dist/application/journey/journey-promoter.js +123 -0
  243. package/dist/application/journey/journey-resolver.d.ts +42 -0
  244. package/dist/application/journey/journey-resolver.js +239 -0
  245. package/dist/application/journey/journey-retirer.d.ts +25 -0
  246. package/dist/application/journey/journey-retirer.js +87 -0
  247. package/dist/application/knowledge/anchor-resolver.d.ts +36 -0
  248. package/dist/application/knowledge/anchor-resolver.js +110 -0
  249. package/dist/application/knowledge/knowledge-loader.d.ts +16 -0
  250. package/dist/application/knowledge/knowledge-loader.js +36 -0
  251. package/dist/application/locator/layout-failure-summary.d.ts +2 -0
  252. package/dist/application/locator/layout-failure-summary.js +67 -0
  253. package/dist/application/locator/layout-traversal.d.ts +11 -0
  254. package/dist/application/locator/layout-traversal.js +18 -0
  255. package/dist/application/locator/locator-resolver.d.ts +13 -1
  256. package/dist/application/locator/locator-resolver.js +182 -18
  257. package/dist/application/observe/observe-service.d.ts +20 -0
  258. package/dist/application/observe/observe-service.js +91 -0
  259. package/dist/application/project/project-describer.d.ts +14 -6
  260. package/dist/application/project/project-describer.js +38 -5
  261. package/dist/application/recognition/screen-detector.d.ts +28 -0
  262. package/dist/application/recognition/screen-detector.js +111 -0
  263. package/dist/application/recorder/locator-selector.js +151 -17
  264. package/dist/application/recorder/recorder-service.d.ts +16 -4
  265. package/dist/application/recorder/recorder-service.js +420 -128
  266. package/dist/application/report/report-writer.d.ts +5 -0
  267. package/dist/application/report/report-writer.js +17 -1
  268. package/dist/application/runtime/cold-launch.d.ts +28 -0
  269. package/dist/application/runtime/cold-launch.js +59 -0
  270. package/dist/application/runtime/step-runner.d.ts +49 -4
  271. package/dist/application/runtime/step-runner.js +721 -130
  272. package/dist/application/runtime/verify-runtime.d.ts +57 -7
  273. package/dist/application/runtime/verify-runtime.js +577 -175
  274. package/dist/application/ui/cached-ui-snapshot-provider.d.ts +45 -0
  275. package/dist/application/ui/cached-ui-snapshot-provider.js +111 -0
  276. package/dist/application/ui/observed-ui-snapshot-provider.d.ts +15 -0
  277. package/dist/application/ui/observed-ui-snapshot-provider.js +66 -0
  278. package/dist/application/ui/ui-snapshot-lifecycle.d.ts +2 -0
  279. package/dist/application/ui/ui-snapshot-lifecycle.js +8 -0
  280. package/dist/application/ui/ui-stability-probe.d.ts +9 -0
  281. package/dist/application/ui/ui-stability-probe.js +24 -0
  282. package/dist/application/wait/idle-advice.d.ts +6 -0
  283. package/dist/application/wait/idle-advice.js +27 -0
  284. package/dist/application/wait/idle-profiles.d.ts +15 -0
  285. package/dist/application/wait/idle-profiles.js +75 -0
  286. package/dist/application/wait/idle-waiter.d.ts +28 -4
  287. package/dist/application/wait/idle-waiter.js +201 -15
  288. package/dist/cli/commands/align.d.ts +3 -0
  289. package/dist/cli/commands/align.js +124 -0
  290. package/dist/cli/commands/baseline.d.ts +3 -0
  291. package/dist/cli/commands/baseline.js +130 -0
  292. package/dist/cli/commands/context.js +300 -27
  293. package/dist/cli/commands/contract.d.ts +3 -0
  294. package/dist/cli/commands/contract.js +120 -0
  295. package/dist/cli/commands/diagnose.d.ts +3 -0
  296. package/dist/cli/commands/diagnose.js +84 -0
  297. package/dist/cli/commands/doctor.js +16 -9
  298. package/dist/cli/commands/failure.d.ts +3 -0
  299. package/dist/cli/commands/failure.js +63 -0
  300. package/dist/cli/commands/generation/lifecycle-commands.d.ts +5 -0
  301. package/dist/cli/commands/generation/lifecycle-commands.js +211 -0
  302. package/dist/cli/commands/generation/session-commands.d.ts +11 -0
  303. package/dist/cli/commands/generation/session-commands.js +472 -0
  304. package/dist/cli/commands/generation/shared.d.ts +1414 -0
  305. package/dist/cli/commands/generation/shared.js +291 -0
  306. package/dist/cli/commands/generation/step-commands.d.ts +8 -0
  307. package/dist/cli/commands/generation/step-commands.js +315 -0
  308. package/dist/cli/commands/generation.js +10 -507
  309. package/dist/cli/commands/impact.d.ts +3 -0
  310. package/dist/cli/commands/impact.js +87 -0
  311. package/dist/cli/commands/init.js +13 -6
  312. package/dist/cli/commands/journey.d.ts +3 -0
  313. package/dist/cli/commands/journey.js +382 -0
  314. package/dist/cli/commands/knowledge.d.ts +3 -0
  315. package/dist/cli/commands/knowledge.js +93 -0
  316. package/dist/cli/commands/observe.d.ts +3 -0
  317. package/dist/cli/commands/observe.js +127 -0
  318. package/dist/cli/commands/project.js +2 -1
  319. package/dist/cli/commands/record.js +18 -5
  320. package/dist/cli/commands/verify.js +326 -64
  321. package/dist/cli/dependencies.d.ts +136 -1
  322. package/dist/cli/dependencies.js +504 -52
  323. package/dist/cli/diagnostics-recorder.d.ts +31 -0
  324. package/dist/cli/diagnostics-recorder.js +82 -0
  325. package/dist/cli/diff-verification.d.ts +41 -0
  326. package/dist/cli/diff-verification.js +192 -0
  327. package/dist/cli/main.d.ts +1 -1
  328. package/dist/cli/main.js +107 -2
  329. package/dist/cli/output.d.ts +5 -3
  330. package/dist/cli/output.js +12 -0
  331. package/dist/cli/program.js +21 -1
  332. package/dist/cli/project-root.d.ts +1 -0
  333. package/dist/cli/project-root.js +6 -0
  334. package/dist/cli/runtime-selection.d.ts +22 -0
  335. package/dist/cli/runtime-selection.js +92 -0
  336. package/dist/cli/version.d.ts +1 -0
  337. package/dist/cli/version.js +14 -0
  338. package/dist/cli/workspace-guard.d.ts +2 -0
  339. package/dist/cli/workspace-guard.js +3 -0
  340. package/dist/domain/binding-reference.d.ts +4 -0
  341. package/dist/domain/binding-reference.js +23 -0
  342. package/dist/domain/checkpoint.d.ts +404 -0
  343. package/dist/domain/checkpoint.js +297 -0
  344. package/dist/domain/config.d.ts +107 -1
  345. package/dist/domain/config.js +52 -6
  346. package/dist/domain/contract.d.ts +413 -0
  347. package/dist/domain/contract.js +196 -0
  348. package/dist/domain/diagnostics.d.ts +1396 -0
  349. package/dist/domain/diagnostics.js +193 -0
  350. package/dist/domain/external-flow.d.ts +493 -0
  351. package/dist/domain/external-flow.js +15 -0
  352. package/dist/domain/failure-classification.d.ts +176 -0
  353. package/dist/domain/failure-classification.js +169 -0
  354. package/dist/domain/failure.d.ts +2 -1
  355. package/dist/domain/failure.js +123 -0
  356. package/dist/domain/generation.d.ts +1671 -132
  357. package/dist/domain/generation.js +202 -13
  358. package/dist/domain/geometry.d.ts +13 -0
  359. package/dist/domain/geometry.js +16 -0
  360. package/dist/domain/impact.d.ts +71 -0
  361. package/dist/domain/impact.js +76 -0
  362. package/dist/domain/init.d.ts +12 -4
  363. package/dist/domain/init.js +24 -18
  364. package/dist/domain/journey-composition.d.ts +2285 -0
  365. package/dist/domain/journey-composition.js +85 -0
  366. package/dist/domain/journey-lifecycle.d.ts +10 -0
  367. package/dist/domain/journey-lifecycle.js +9 -0
  368. package/dist/domain/journey.d.ts +2419 -212
  369. package/dist/domain/journey.js +384 -14
  370. package/dist/domain/knowledge.d.ts +165 -0
  371. package/dist/domain/knowledge.js +188 -0
  372. package/dist/domain/layout.d.ts +34 -5
  373. package/dist/domain/layout.js +64 -6
  374. package/dist/domain/locator-evidence.d.ts +3 -0
  375. package/dist/domain/locator-evidence.js +36 -0
  376. package/dist/domain/logcat-event.d.ts +54 -0
  377. package/dist/domain/logcat-event.js +40 -0
  378. package/dist/domain/observation.d.ts +33 -0
  379. package/dist/domain/observation.js +18 -0
  380. package/dist/domain/project-context.d.ts +219 -1
  381. package/dist/domain/project-context.js +209 -6
  382. package/dist/domain/proposed-step.d.ts +340 -60
  383. package/dist/domain/proposed-step.js +23 -3
  384. package/dist/domain/report.d.ts +1455 -28
  385. package/dist/domain/report.js +211 -14
  386. package/dist/domain/runtime-snapshot.d.ts +58 -1
  387. package/dist/domain/runtime-snapshot.js +14 -3
  388. package/dist/domain/runtime.d.ts +50 -0
  389. package/dist/domain/runtime.js +36 -0
  390. package/dist/domain/system-app-profiles.d.ts +6 -0
  391. package/dist/domain/system-app-profiles.js +43 -0
  392. package/dist/domain/ui-backend.d.ts +28 -0
  393. package/dist/domain/ui-backend.js +33 -0
  394. package/dist/domain/ui-cache.d.ts +11 -0
  395. package/dist/domain/ui-cache.js +10 -0
  396. package/dist/domain/verify-receipt.d.ts +17 -0
  397. package/dist/domain/verify-receipt.js +17 -0
  398. package/dist/domain/window-hierarchy.d.ts +84 -0
  399. package/dist/domain/window-hierarchy.js +172 -0
  400. package/dist/domain/workflow-manifest.d.ts +77 -0
  401. package/dist/domain/workflow-manifest.js +136 -0
  402. package/dist/domain/workspace.d.ts +30 -0
  403. package/dist/domain/workspace.js +74 -0
  404. package/dist/ports/adb.d.ts +34 -1
  405. package/dist/ports/align-prompt.d.ts +11 -0
  406. package/dist/ports/align-prompt.js +6 -0
  407. package/dist/ports/anchor-resolver.d.ts +30 -0
  408. package/dist/ports/anchor-resolver.js +1 -0
  409. package/dist/ports/annotated-screen-resolver.d.ts +4 -0
  410. package/dist/ports/annotated-screen-resolver.js +1 -0
  411. package/dist/ports/camera-probe.d.ts +23 -0
  412. package/dist/ports/camera-probe.js +8 -0
  413. package/dist/ports/context-document-writer.d.ts +24 -0
  414. package/dist/ports/context-document-writer.js +1 -0
  415. package/dist/ports/detached-process-launcher.d.ts +12 -0
  416. package/dist/ports/detached-process-launcher.js +1 -0
  417. package/dist/ports/diagnostics.d.ts +15 -0
  418. package/dist/ports/diagnostics.js +1 -0
  419. package/dist/ports/external-flow-registry.d.ts +37 -0
  420. package/dist/ports/external-flow-registry.js +1 -0
  421. package/dist/ports/generation-prompt.d.ts +2 -1
  422. package/dist/ports/generation-session-store.d.ts +12 -2
  423. package/dist/ports/git-diff.d.ts +9 -0
  424. package/dist/ports/git-diff.js +1 -0
  425. package/dist/ports/journey-composition-store.d.ts +17 -0
  426. package/dist/ports/journey-composition-store.js +1 -0
  427. package/dist/ports/knowledge-registry.d.ts +20 -0
  428. package/dist/ports/knowledge-registry.js +1 -0
  429. package/dist/ports/process-runner.d.ts +7 -0
  430. package/dist/ports/project-file-inspector.d.ts +1 -0
  431. package/dist/ports/project-identity-inspector.d.ts +24 -0
  432. package/dist/ports/project-identity-inspector.js +1 -0
  433. package/dist/ports/project-inventory-inspector.d.ts +21 -0
  434. package/dist/ports/project-inventory-inspector.js +1 -0
  435. package/dist/ports/project-module-discoverer.d.ts +26 -0
  436. package/dist/ports/project-module-discoverer.js +1 -0
  437. package/dist/ports/recorder-prompt.d.ts +10 -1
  438. package/dist/ports/runtime-backend.d.ts +89 -0
  439. package/dist/ports/runtime-backend.js +13 -0
  440. package/dist/ports/runtime-capability.d.ts +12 -0
  441. package/dist/ports/runtime-capability.js +20 -0
  442. package/dist/ports/runtime-session-ports.d.ts +25 -0
  443. package/dist/ports/runtime-session-ports.js +1 -0
  444. package/dist/ports/screenshot.d.ts +11 -0
  445. package/dist/ports/screenshot.js +1 -0
  446. package/dist/ports/skill-installer.d.ts +2 -2
  447. package/dist/ports/ui-snapshot.d.ts +35 -0
  448. package/dist/ports/ui-snapshot.js +1 -0
  449. package/dist/ports/ui-stability.d.ts +19 -0
  450. package/dist/ports/ui-stability.js +1 -0
  451. package/dist/ports/workspace-layout.d.ts +4 -0
  452. package/dist/ports/workspace-layout.js +1 -0
  453. package/dist/shared/errors.d.ts +2 -0
  454. package/dist/shared/errors.js +22 -0
  455. package/dist/shared/paths.d.ts +2 -0
  456. package/dist/shared/paths.js +24 -0
  457. package/dist/shared/strings.d.ts +2 -0
  458. package/dist/shared/strings.js +16 -0
  459. package/package.json +7 -2
  460. package/assets/skills/taphound-ai-journey/GUIDE.md +0 -862
  461. package/assets/skills/taphound-ai-journey/SKILL.md +0 -377
  462. package/assets/skills/taphound-ai-journey/prompts/analyze-project.md +0 -526
  463. package/assets/skills/taphound-ai-journey/prompts/generate-step.md +0 -109
  464. package/assets/skills/taphound-ai-journey/schemas/project-context.json +0 -81
  465. package/assets/skills/taphound-ai-journey/templates/project-context.example.json +0 -49
  466. package/dist/ports/android-cli.d.ts +0 -21
  467. /package/dist/{ports/android-cli.js → adapters/runtime/mobile-mcp/mobile-mcp-tools.js} +0 -0
@@ -0,0 +1,363 @@
1
+ ---
2
+ name: taphound-case-suite
3
+ description: >-
4
+ Persist and orchestrate a multi-Case TapHound Journey generation suite.
5
+ Freezes the user-approved Case catalog, maintains an atomic revisioned
6
+ Case Ledger and human-readable status, plans verified Base Flow reuse,
7
+ and dispatches exactly one Case at a time to the Journey Brief Author
8
+ and Journey Generator Skills. Use when a regression plan contains
9
+ multiple Cases or must survive context compaction, agent restart, or
10
+ interrupted generation sessions.
11
+ compatibility: >-
12
+ Requires Node.js 22+, TapHound's taphound-journey-brief-author and
13
+ taphound-journey-generator Skills, and the public TapHound CLI.
14
+ metadata:
15
+ author: TapHound
16
+ version: "1.0"
17
+ ---
18
+
19
+ # TapHound Case Suite
20
+
21
+ This Workflow Skill owns durable **multi-Case orchestration**. It never
22
+ executes a Journey step itself and never reads or writes Core generation
23
+ bundles. It dispatches one Case at a time to:
24
+
25
+ - `taphound-journey-brief-author` for one Case Brief;
26
+ - `taphound-journey-generator` for one generation session and final Replay.
27
+
28
+ The Case catalog and Ledger on disk are the Source of Truth. Chat history is
29
+ not a requirement store. Never reconstruct missing Cases from memory,
30
+ resource IDs, source hints, or a prior conversation summary.
31
+
32
+ ## Skill payload
33
+
34
+ All paths below are relative to this installed Skill:
35
+
36
+ ```text
37
+ taphound-case-suite/
38
+ ├── SKILL.md
39
+ ├── scripts/ledger.mjs
40
+ ├── schemas/
41
+ │ ├── suite-input.schema.json
42
+ │ ├── case-catalog.schema.json
43
+ │ ├── case-ledger.schema.json
44
+ │ ├── transition.schema.json
45
+ │ └── base-flow-record.schema.json
46
+ └── templates/
47
+ ├── suite-input.example.json
48
+ ├── transition.example.json
49
+ └── base-flow-record.example.json
50
+ ```
51
+
52
+ Use `node <skill>/scripts/ledger.mjs help` for the helper contract.
53
+
54
+ ## Durable suite directory
55
+
56
+ The caller chooses an explicit project-relative suite directory. A normal
57
+ layout is:
58
+
59
+ ```text
60
+ doc/development/<suite-id>/
61
+ ├── cases.json # frozen user-approved Case catalog
62
+ ├── case-ledger.json # mutable, revisioned orchestration state
63
+ ├── STATUS.md # generated human view; never the Source of Truth
64
+ └── briefs/
65
+ └── <case-id>/taphound-journey-brief.md
66
+ ```
67
+
68
+ `cases.json` is immutable after initialization. To change requirements,
69
+ archive the old Suite and initialize a new Suite ID. Do not edit
70
+ `case-ledger.json` or `STATUS.md` by hand; use the helper so revision checks,
71
+ transition rules, hashes, and the single-active-Case invariant are enforced.
72
+
73
+ The suite directory is committed project material. Runtime reports and
74
+ generation bundles remain under `.taphound/build/` and may be referenced by
75
+ path and hash, but raw Logcat, screenshots, captured values, credentials, and
76
+ personal data must never be copied into the catalog or Ledger.
77
+
78
+ ## Phase 0: Freeze the Case catalog
79
+
80
+ Require the complete user-approved Case list before execution. Each Case needs:
81
+
82
+ - stable `id`;
83
+ - explicit `order`;
84
+ - title;
85
+ - exact `sourceText` preserving the user's requirement;
86
+ - `risk`: `readOnly`, `stateChanging`, or `external`;
87
+ - dependency Case IDs;
88
+ - optional planned Base Flow name.
89
+
90
+ If the original list is unavailable, a source-derived proposal is allowed only
91
+ as a draft presented to the user. Initialize the Suite only after approval.
92
+ Never silently fill gaps.
93
+
94
+ Create an input from `templates/suite-input.example.json`, then:
95
+
96
+ ```bash
97
+ node <skill>/scripts/ledger.mjs init \
98
+ --input /tmp/taphound-suite-input.json \
99
+ --out <project>/doc/development/<suite-id>
100
+ ```
101
+
102
+ Initialization canonicalizes `projectRoot`, validates dependency cycles and
103
+ ordering, writes the frozen catalog, records its exact-byte SHA-256 in the
104
+ Ledger, and creates `STATUS.md`. Existing suite files are never overwritten.
105
+
106
+ ## Phase 1: Resume from disk
107
+
108
+ At the start of every agent invocation, including after context compaction:
109
+
110
+ ```bash
111
+ node <skill>/scripts/ledger.mjs validate --suite <suite-directory>
112
+ node <skill>/scripts/ledger.mjs status --suite <suite-directory>
113
+ ```
114
+
115
+ For machine-readable details about one Case only:
116
+
117
+ ```bash
118
+ node <skill>/scripts/ledger.mjs status \
119
+ --suite <suite-directory> --case <case-id>
120
+ ```
121
+
122
+ Without `--case`, the summary JSON remains the stable suite-level contract.
123
+
124
+ Then:
125
+
126
+ 1. Read `cases.json` and `case-ledger.json`.
127
+ 2. If one Case is nonterminal and not `pending`, resume that Case first.
128
+ 3. Reconcile a stored `generationId` with:
129
+ ```bash
130
+ taphound generation status \
131
+ --project <project> --session <generationId> --json
132
+ ```
133
+ 4. Follow the recorded `nextAction`; never infer that an interrupted action is
134
+ safe to repeat.
135
+ 5. Only when no Case is active, select the lowest-order eligible `pending`
136
+ Case whose dependencies are `verified`.
137
+
138
+ The helper uses optimistic concurrency. Every transition requires the current
139
+ `expectedRevision`; a stale agent fails instead of overwriting newer work.
140
+ If an agent process was killed while holding the short-lived helper lock,
141
+ first confirm no update process is running, then use:
142
+
143
+ ```bash
144
+ node <skill>/scripts/ledger.mjs recover-lock --suite <suite-directory>
145
+ ```
146
+
147
+ The helper removes the lock only when its recorded local PID no longer exists;
148
+ it never breaks a live writer's lock.
149
+
150
+ ## Phase 2: Plan order and Base Flows
151
+
152
+ Order Cases by deterministic prerequisites, not by convenience:
153
+
154
+ 1. stable cold-launch and entry coverage;
155
+ 2. shallow read-only Cases;
156
+ 3. same-page controls and navigation;
157
+ 4. asynchronous/WebView Cases;
158
+ 5. state-changing Cases;
159
+ 6. external/cross-package Cases.
160
+
161
+ Keep user-declared `order` authoritative. Dependencies may delay a Case, but
162
+ the Skill must not reorder or rewrite the catalog silently.
163
+
164
+ Cluster Cases by repeated navigation prefix. A Base Flow is eligible only when:
165
+
166
+ - it begins at a stable Activity reachable after cold launch;
167
+ - it contains only shared deterministic navigation;
168
+ - it contains no Case-specific business action or assertion;
169
+ - its Activity boundaries compose exactly;
170
+ - a Journey Source that includes the Flow was resolved;
171
+ - the resolution manifest binds the exact Flow hash and resolved Journey hash;
172
+ - an independent Replay of that resolved Journey passed;
173
+ - all file and report hashes are recorded in the Ledger.
174
+
175
+ Record a verified Flow:
176
+
177
+ ```bash
178
+ node <skill>/scripts/ledger.mjs record-flow \
179
+ --suite <suite-directory> \
180
+ --input /tmp/taphound-flow-record.json
181
+ ```
182
+
183
+ Use `templates/base-flow-record.example.json`. The helper validates the Flow
184
+ name/file, resolution manifest, resolved Journey, exact hashes, passed report,
185
+ project confinement, and revision.
186
+ Never modify a bound Flow while a generation session is active.
187
+
188
+ ## Phase 3: One Case at a time
189
+
190
+ The device policy is serial. On one device, never run two active Cases or two
191
+ generation sessions concurrently. Separate devices are outside v1; initialize
192
+ separate Suites instead of bypassing this invariant.
193
+
194
+ ### 3.1 Claim
195
+
196
+ Transition the selected Case:
197
+
198
+ ```text
199
+ pending → briefing
200
+ ```
201
+
202
+ Use `templates/transition.example.json` and:
203
+
204
+ ```bash
205
+ node <skill>/scripts/ledger.mjs transition \
206
+ --suite <suite-directory> \
207
+ --input /tmp/taphound-transition.json
208
+ ```
209
+
210
+ ### 3.2 Brief
211
+
212
+ Dispatch exactly one Case to `taphound-journey-brief-author` with:
213
+
214
+ - `caseId`;
215
+ - exact catalog `sourceText` as `caseGoal`;
216
+ - explicit context paths only;
217
+ - output
218
+ `<suite>/briefs/<case-id>/taphound-journey-brief.md`.
219
+
220
+ After authoring, compute its exact hash and transition:
221
+
222
+ ```text
223
+ briefing → briefReady
224
+ ```
225
+
226
+ The transition must carry `brief: {path, sha256}`. Paths stored in the Ledger
227
+ are project-relative. Set `sha256` to the literal string `compute` to make the
228
+ helper hash the exact file bytes at `path` and store the result; omitting the
229
+ field is still invalid.
230
+
231
+ ### 3.3 Generation
232
+
233
+ Before generation:
234
+
235
+ - ensure Project Context is valid;
236
+ - list Flows;
237
+ - if the Case plans a Base Flow, require the Ledger to contain the same Flow
238
+ in `verified` state;
239
+ - pass the bound Brief path/hash to the Generator.
240
+
241
+ Start one session and transition:
242
+
243
+ ```text
244
+ briefReady → generating
245
+ ```
246
+
247
+ Record `generation: {id, baseFlow?}`. After every public CLI command, write the
248
+ new failure/next action to the Ledger before doing more work.
249
+
250
+ The Journey Generator remains authoritative for observe/step/confirmation,
251
+ `recover`, `reopen`, replacement, and finalization semantics.
252
+
253
+ ### 3.4 Final Replay and independent Replay
254
+
255
+ After candidate steps are complete:
256
+
257
+ ```text
258
+ generating → verificationPending
259
+ ```
260
+
261
+ Run `generation finalize`. A generated Journey is not Suite-complete yet.
262
+ Run one independent standard `taphound verify` against the exported Journey
263
+ and strict generated Replay policy.
264
+
265
+ Only then transition:
266
+
267
+ ```text
268
+ verificationPending → verified
269
+ ```
270
+
271
+ The transition must provide:
272
+
273
+ - Journey path/hash;
274
+ - generation meta path/hash (`status: verified`);
275
+ - finalization report path/hash (`status: passed`);
276
+ - independent report path/hash (`status: passed`, different `runId`).
277
+
278
+ Each of the four entries accepts `sha256: "compute"`, so the transition input
279
+ can name the paths and let the helper compute the exact file hashes. The stored
280
+ Ledger always holds the resolved hex digests, and every later `validate` still
281
+ fails with `CASE_SUITE_STALE` when a recorded artifact changes.
282
+
283
+ The helper reads and hashes all four artifacts. Agent prose, screenshots, a
284
+ successful last step, or a finalization report without independent Replay can
285
+ never mark a Case `verified`.
286
+
287
+ ## Failure and recovery states
288
+
289
+ Allowed states:
290
+
291
+ ```text
292
+ pending
293
+ briefing
294
+ briefReady
295
+ generating
296
+ recoveryRequired
297
+ verificationPending
298
+ verificationFailed
299
+ blocked
300
+ deferred
301
+ verified
302
+ archived
303
+ ```
304
+
305
+ Important paths:
306
+
307
+ - interrupted action or verification:
308
+ `generating|verificationPending → recoveryRequired`;
309
+ - deterministic final Replay failure:
310
+ `verificationPending → verificationFailed`;
311
+ - tool/environment/context blocker:
312
+ current state → `blocked`;
313
+ - intentionally postponed work:
314
+ any nonterminal state → `deferred`;
315
+ - user abandonment:
316
+ nonterminal state → `archived`.
317
+
318
+ `recoveryRequired` must record `failure` and `nextAction`. Obtain explicit user
319
+ approval before Core `generation recover --decision retry`.
320
+ `verificationFailed` resumes only after audited `generation reopen`.
321
+ When entering `blocked`, the helper records the exact prior state; it may
322
+ resume only to that state. `blocked` remains the current Case and continues to
323
+ occupy the active slot. A `deferred` Case records `failure`, `nextAction`, and
324
+ the state it must resume; it does not occupy the active slot, so multiple Cases
325
+ may be deferred. Deferring an already blocked or recovery-required Case
326
+ preserves the original interrupted state rather than replacing it with the
327
+ wrapper state. A deferred Case may resume only to its recorded state (or be
328
+ archived); resuming an active state rechecks dependencies and the single-active
329
+ Case rule. `verified` and `archived` are terminal.
330
+
331
+ One blocked or otherwise active Case remains the Suite's current Case. Do not
332
+ skip it merely to make the completion count increase; explicitly defer,
333
+ archive, or resolve it.
334
+
335
+ ## Completion and handoff
336
+
337
+ The Suite is complete only when every Case is `verified` or explicitly
338
+ `archived`. `STATUS.md` shows checkboxes and evidence links, but all automation
339
+ must read `case-ledger.json`.
340
+
341
+ To hand work to another Agent, provide only:
342
+
343
+ - absolute suite directory;
344
+ - project path if it is not already canonical in `cases.json`;
345
+ - device availability.
346
+
347
+ The receiving Agent validates and resumes from disk. It does not need the
348
+ previous conversation or a re-posted Case list.
349
+
350
+ ## Hard rules
351
+
352
+ - Never use chat history as the only Case store.
353
+ - Never guess a missing Case.
354
+ - Never edit the frozen catalog after initialization.
355
+ - Never manually edit the Ledger or generated status.
356
+ - Never run two Cases on one device concurrently.
357
+ - Never auto-approve confirmation or recovery.
358
+ - Never call a Case done before finalization plus independent Replay.
359
+ - Never put raw Logcat, screenshots, captured values, secrets, or user content
360
+ in Suite files.
361
+ - Never treat a Base Flow as verified without a passing independent report and
362
+ recorded hashes.
363
+ - Never read or write `.taphound/build/generations` directly.
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://taphound.dev/schemas/base-flow-record-v1.json",
4
+ "title": "TapHound Verified Base Flow Record",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "version", "expectedRevision", "name", "path", "sha256",
9
+ "exitActivity", "journey", "resolutionManifest", "report"
10
+ ],
11
+ "properties": {
12
+ "version": { "const": 1 },
13
+ "expectedRevision": { "type": "integer", "minimum": 0 },
14
+ "name": { "type": "string", "minLength": 1 },
15
+ "path": { "type": "string", "minLength": 1 },
16
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
17
+ "exitActivity": { "type": "string", "minLength": 1 },
18
+ "journey": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
19
+ "resolutionManifest": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
20
+ "report": { "$ref": "case-ledger-v1.json#/$defs/artifact" }
21
+ }
22
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://taphound.dev/schemas/case-catalog-v1.json",
4
+ "title": "TapHound Frozen Case Catalog",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "version", "kind", "suiteId", "title", "projectRoot",
9
+ "contextPath", "createdAt", "cases"
10
+ ],
11
+ "properties": {
12
+ "version": { "const": 1 },
13
+ "kind": { "const": "taphound.caseCatalog" },
14
+ "suiteId": { "type": "string", "minLength": 1 },
15
+ "title": { "type": "string", "minLength": 1 },
16
+ "projectRoot": { "type": "string", "minLength": 1 },
17
+ "deviceSerial": { "type": "string", "minLength": 1 },
18
+ "contextPath": { "type": "string", "minLength": 1 },
19
+ "createdAt": { "type": "string", "format": "date-time" },
20
+ "cases": {
21
+ "type": "array",
22
+ "minItems": 1,
23
+ "items": { "$ref": "case-suite-input-v1.json#/$defs/case" }
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://taphound.dev/schemas/case-ledger-v1.json",
4
+ "title": "TapHound Case Suite Ledger",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "version", "kind", "suiteId", "revision", "catalog",
9
+ "devicePolicy", "baseFlows", "cases", "updatedAt"
10
+ ],
11
+ "properties": {
12
+ "version": { "const": 1 },
13
+ "kind": { "const": "taphound.caseLedger" },
14
+ "suiteId": { "type": "string", "minLength": 1 },
15
+ "revision": { "type": "integer", "minimum": 0 },
16
+ "catalog": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["path", "sha256"],
20
+ "properties": {
21
+ "path": { "const": "cases.json" },
22
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
23
+ }
24
+ },
25
+ "devicePolicy": {
26
+ "type": "object",
27
+ "additionalProperties": false,
28
+ "required": ["concurrency"],
29
+ "properties": {
30
+ "concurrency": { "const": "serial" },
31
+ "deviceSerial": { "type": "string", "minLength": 1 }
32
+ }
33
+ },
34
+ "baseFlows": {
35
+ "type": "array",
36
+ "items": {
37
+ "type": "object",
38
+ "additionalProperties": false,
39
+ "required": [
40
+ "name", "status", "path", "sha256", "exitActivity",
41
+ "journey", "resolutionManifest", "report", "recordedAt"
42
+ ],
43
+ "properties": {
44
+ "name": { "type": "string", "minLength": 1 },
45
+ "status": { "const": "verified" },
46
+ "path": { "type": "string", "minLength": 1 },
47
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
48
+ "exitActivity": { "type": "string", "minLength": 1 },
49
+ "journey": { "$ref": "#/$defs/artifact" },
50
+ "resolutionManifest": { "$ref": "#/$defs/artifact" },
51
+ "report": { "$ref": "#/$defs/artifact" },
52
+ "recordedAt": { "type": "string", "format": "date-time" }
53
+ }
54
+ }
55
+ },
56
+ "cases": {
57
+ "type": "array",
58
+ "minItems": 1,
59
+ "items": {
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "required": [
63
+ "id", "order", "title", "sourceSha256", "risk", "dependsOn",
64
+ "status", "history"
65
+ ],
66
+ "properties": {
67
+ "id": { "type": "string", "minLength": 1 },
68
+ "order": { "type": "integer", "minimum": 1 },
69
+ "title": { "type": "string", "minLength": 1 },
70
+ "sourceSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
71
+ "risk": { "enum": ["readOnly", "stateChanging", "external"] },
72
+ "dependsOn": { "type": "array", "items": { "type": "string" } },
73
+ "plannedBaseFlow": { "type": "string", "minLength": 1 },
74
+ "status": {
75
+ "enum": [
76
+ "pending", "briefing", "briefReady", "generating",
77
+ "recoveryRequired", "verificationPending",
78
+ "verificationFailed", "blocked", "deferred", "verified", "archived"
79
+ ]
80
+ },
81
+ "resumeStatus": {
82
+ "enum": [
83
+ "pending", "briefing", "briefReady", "generating",
84
+ "recoveryRequired", "verificationPending",
85
+ "verificationFailed", "blocked", "deferred", "verified", "archived"
86
+ ]
87
+ },
88
+ "brief": { "$ref": "#/$defs/artifact" },
89
+ "generation": {
90
+ "type": "object",
91
+ "additionalProperties": false,
92
+ "required": ["id"],
93
+ "properties": {
94
+ "id": { "type": "string", "minLength": 1 },
95
+ "baseFlow": { "type": "string", "minLength": 1 }
96
+ }
97
+ },
98
+ "failure": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": ["code", "message"],
102
+ "properties": {
103
+ "code": { "type": "string", "minLength": 1 },
104
+ "message": { "type": "string", "minLength": 1, "maxLength": 1000 }
105
+ }
106
+ },
107
+ "nextAction": { "type": "string", "minLength": 1, "maxLength": 1000 },
108
+ "completion": {
109
+ "type": "object",
110
+ "additionalProperties": false,
111
+ "required": ["journey", "meta", "finalReport", "independentReport"],
112
+ "properties": {
113
+ "journey": { "$ref": "#/$defs/artifact" },
114
+ "meta": { "$ref": "#/$defs/artifact" },
115
+ "finalReport": { "$ref": "#/$defs/artifact" },
116
+ "independentReport": { "$ref": "#/$defs/artifact" }
117
+ }
118
+ },
119
+ "history": {
120
+ "type": "array",
121
+ "items": {
122
+ "type": "object",
123
+ "additionalProperties": false,
124
+ "required": ["to", "at", "reason"],
125
+ "properties": {
126
+ "from": { "type": "string", "minLength": 1 },
127
+ "to": { "type": "string", "minLength": 1 },
128
+ "at": { "type": "string", "format": "date-time" },
129
+ "reason": { "type": "string", "minLength": 1, "maxLength": 500 }
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "allOf": [{
135
+ "if": {
136
+ "properties": { "status": { "const": "deferred" } },
137
+ "required": ["status"]
138
+ },
139
+ "then": {
140
+ "required": ["resumeStatus", "failure", "nextAction"]
141
+ }
142
+ }]
143
+ }
144
+ },
145
+ "updatedAt": { "type": "string", "format": "date-time" }
146
+ },
147
+ "$defs": {
148
+ "artifact": {
149
+ "type": "object",
150
+ "additionalProperties": false,
151
+ "required": ["path", "sha256"],
152
+ "properties": {
153
+ "path": { "type": "string", "minLength": 1 },
154
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
155
+ }
156
+ }
157
+ }
158
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://taphound.dev/schemas/case-suite-input-v1.json",
4
+ "title": "TapHound Case Suite Input",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["version", "suiteId", "title", "projectRoot", "cases"],
8
+ "properties": {
9
+ "version": { "const": 1 },
10
+ "suiteId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$" },
11
+ "title": { "type": "string", "minLength": 1, "maxLength": 200 },
12
+ "projectRoot": { "type": "string", "minLength": 1 },
13
+ "deviceSerial": { "type": "string", "minLength": 1 },
14
+ "contextPath": { "type": "string", "minLength": 1 },
15
+ "cases": {
16
+ "type": "array",
17
+ "minItems": 1,
18
+ "items": { "$ref": "#/$defs/case" }
19
+ }
20
+ },
21
+ "$defs": {
22
+ "case": {
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": ["id", "order", "title", "sourceText", "risk", "dependsOn"],
26
+ "properties": {
27
+ "id": { "type": "string", "pattern": "^[A-Z][A-Z0-9_-]{0,63}$" },
28
+ "order": { "type": "integer", "minimum": 1 },
29
+ "title": { "type": "string", "minLength": 1, "maxLength": 200 },
30
+ "sourceText": { "type": "string", "minLength": 1, "maxLength": 10000 },
31
+ "risk": { "enum": ["readOnly", "stateChanging", "external"] },
32
+ "dependsOn": {
33
+ "type": "array",
34
+ "uniqueItems": true,
35
+ "items": { "type": "string", "pattern": "^[A-Z][A-Z0-9_-]{0,63}$" }
36
+ },
37
+ "plannedBaseFlow": { "type": "string", "minLength": 1, "maxLength": 200 }
38
+ }
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://taphound.dev/schemas/case-transition-v1.json",
4
+ "title": "TapHound Case Ledger Transition",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "version", "expectedRevision", "caseId", "from", "to", "reason"
9
+ ],
10
+ "properties": {
11
+ "version": { "const": 1 },
12
+ "expectedRevision": { "type": "integer", "minimum": 0 },
13
+ "caseId": { "type": "string", "minLength": 1 },
14
+ "from": {
15
+ "enum": [
16
+ "pending", "briefing", "briefReady", "generating",
17
+ "recoveryRequired", "verificationPending", "verificationFailed",
18
+ "blocked", "deferred", "verified", "archived"
19
+ ]
20
+ },
21
+ "to": {
22
+ "enum": [
23
+ "pending", "briefing", "briefReady", "generating",
24
+ "recoveryRequired", "verificationPending", "verificationFailed",
25
+ "blocked", "deferred", "verified", "archived"
26
+ ]
27
+ },
28
+ "reason": { "type": "string", "minLength": 1, "maxLength": 500 },
29
+ "brief": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
30
+ "generation": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["id"],
34
+ "properties": {
35
+ "id": { "type": "string", "minLength": 1 },
36
+ "baseFlow": { "type": "string", "minLength": 1 }
37
+ }
38
+ },
39
+ "failure": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["code", "message"],
43
+ "properties": {
44
+ "code": { "type": "string", "minLength": 1 },
45
+ "message": { "type": "string", "minLength": 1, "maxLength": 1000 }
46
+ }
47
+ },
48
+ "nextAction": { "type": "string", "minLength": 1, "maxLength": 1000 },
49
+ "completion": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "required": ["journey", "meta", "finalReport", "independentReport"],
53
+ "properties": {
54
+ "journey": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
55
+ "meta": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
56
+ "finalReport": { "$ref": "case-ledger-v1.json#/$defs/artifact" },
57
+ "independentReport": { "$ref": "case-ledger-v1.json#/$defs/artifact" }
58
+ }
59
+ }
60
+ }
61
+ }