@aperant/framework 0.8.1 → 0.8.4

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 (248) hide show
  1. package/CHANGELOG.md +287 -1
  2. package/agents/apt-planner.md +5 -4
  3. package/dist/cli/commands/adr.mjs +1 -1
  4. package/dist/cli/commands/audit-branch-current.d.mts +25 -0
  5. package/dist/cli/commands/audit-branch-current.d.mts.map +1 -0
  6. package/dist/cli/commands/audit-branch-current.mjs +252 -0
  7. package/dist/cli/commands/audit-branch-current.mjs.map +1 -0
  8. package/dist/cli/commands/audit.d.mts.map +1 -1
  9. package/dist/cli/commands/audit.mjs +13 -2
  10. package/dist/cli/commands/audit.mjs.map +1 -1
  11. package/dist/cli/commands/check-version.d.mts.map +1 -1
  12. package/dist/cli/commands/check-version.mjs +19 -1
  13. package/dist/cli/commands/check-version.mjs.map +1 -1
  14. package/dist/cli/commands/context.mjs +3 -3
  15. package/dist/cli/commands/context.mjs.map +1 -1
  16. package/dist/cli/commands/detect-runtime.d.mts +6 -0
  17. package/dist/cli/commands/detect-runtime.d.mts.map +1 -0
  18. package/dist/cli/commands/detect-runtime.mjs +136 -0
  19. package/dist/cli/commands/detect-runtime.mjs.map +1 -0
  20. package/dist/cli/commands/driver-doctor.d.mts +29 -0
  21. package/dist/cli/commands/driver-doctor.d.mts.map +1 -0
  22. package/dist/cli/commands/driver-doctor.mjs +291 -0
  23. package/dist/cli/commands/driver-doctor.mjs.map +1 -0
  24. package/dist/cli/commands/gate.mjs +14 -0
  25. package/dist/cli/commands/gate.mjs.map +1 -1
  26. package/dist/cli/commands/init.d.mts.map +1 -1
  27. package/dist/cli/commands/init.mjs +9 -6
  28. package/dist/cli/commands/init.mjs.map +1 -1
  29. package/dist/cli/commands/install-from-source.d.mts +2 -0
  30. package/dist/cli/commands/install-from-source.d.mts.map +1 -0
  31. package/dist/cli/commands/install-from-source.mjs +2 -0
  32. package/dist/cli/commands/install-from-source.mjs.map +1 -0
  33. package/dist/cli/commands/modes.mjs +1 -1
  34. package/dist/cli/commands/route.d.mts.map +1 -1
  35. package/dist/cli/commands/route.mjs +38 -1
  36. package/dist/cli/commands/route.mjs.map +1 -1
  37. package/dist/cli/commands/triage.mjs +1 -1
  38. package/dist/cli/config/load.d.mts.map +1 -1
  39. package/dist/cli/config/load.mjs +9 -3
  40. package/dist/cli/config/load.mjs.map +1 -1
  41. package/dist/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
  42. package/dist/cli/coordination/event-schema.d.mts.map +1 -1
  43. package/dist/cli/coordination/event-schema.mjs +18 -0
  44. package/dist/cli/coordination/event-schema.mjs.map +1 -1
  45. package/dist/cli/dispatch.d.mts.map +1 -1
  46. package/dist/cli/dispatch.mjs +18 -1
  47. package/dist/cli/dispatch.mjs.map +1 -1
  48. package/dist/cli/gate/context.d.mts +1 -0
  49. package/dist/cli/gate/context.d.mts.map +1 -1
  50. package/dist/cli/gate/context.mjs +14 -1
  51. package/dist/cli/gate/context.mjs.map +1 -1
  52. package/dist/cli/gate/gates/consistency-check.d.mts +1 -0
  53. package/dist/cli/gate/gates/consistency-check.d.mts.map +1 -1
  54. package/dist/cli/gate/gates/consistency-check.mjs +1 -0
  55. package/dist/cli/gate/gates/consistency-check.mjs.map +1 -1
  56. package/dist/cli/gate/gates/review-clean.d.mts +1 -0
  57. package/dist/cli/gate/gates/review-clean.d.mts.map +1 -1
  58. package/dist/cli/gate/gates/review-clean.mjs +1 -0
  59. package/dist/cli/gate/gates/review-clean.mjs.map +1 -1
  60. package/dist/cli/gate/gates/verify-approved.d.mts +1 -0
  61. package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
  62. package/dist/cli/gate/gates/verify-approved.mjs +1 -0
  63. package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
  64. package/dist/cli/gate/registry.d.mts.map +1 -1
  65. package/dist/cli/gate/registry.mjs +9 -1
  66. package/dist/cli/gate/registry.mjs.map +1 -1
  67. package/dist/cli/install/find-workspace-framework-version.d.mts +16 -0
  68. package/dist/cli/install/find-workspace-framework-version.d.mts.map +1 -0
  69. package/dist/cli/install/find-workspace-framework-version.mjs +85 -0
  70. package/dist/cli/install/find-workspace-framework-version.mjs.map +1 -0
  71. package/dist/cli/install/install-from-source.d.mts +10 -0
  72. package/dist/cli/install/install-from-source.d.mts.map +1 -0
  73. package/dist/cli/install/install-from-source.mjs +271 -0
  74. package/dist/cli/install/install-from-source.mjs.map +1 -0
  75. package/dist/cli/install/install-kernel.d.mts.map +1 -1
  76. package/dist/cli/install/install-kernel.mjs +24 -0
  77. package/dist/cli/install/install-kernel.mjs.map +1 -1
  78. package/dist/cli/install/legacy-paths.d.mts +33 -11
  79. package/dist/cli/install/legacy-paths.d.mts.map +1 -1
  80. package/dist/cli/install/legacy-paths.mjs +161 -39
  81. package/dist/cli/install/legacy-paths.mjs.map +1 -1
  82. package/dist/cli/install/runtime-detect.mjs +1 -1
  83. package/dist/cli/install/runtime-detect.mjs.map +1 -1
  84. package/dist/cli/install/runtime-migrate.d.mts +34 -14
  85. package/dist/cli/install/runtime-migrate.d.mts.map +1 -1
  86. package/dist/cli/install/runtime-migrate.mjs +63 -30
  87. package/dist/cli/install/runtime-migrate.mjs.map +1 -1
  88. package/dist/cli/install/transforms/codex.d.mts.map +1 -1
  89. package/dist/cli/install/transforms/codex.mjs +28 -17
  90. package/dist/cli/install/transforms/codex.mjs.map +1 -1
  91. package/dist/cli/skill-author/contract.mjs +2 -2
  92. package/dist/cli/skill-author/contract.mjs.map +1 -1
  93. package/dist/cli/verify-proof/audit.d.mts +34 -0
  94. package/dist/cli/verify-proof/audit.d.mts.map +1 -0
  95. package/dist/cli/verify-proof/audit.mjs +53 -0
  96. package/dist/cli/verify-proof/audit.mjs.map +1 -0
  97. package/dist/cli/verify-proof/exec.d.mts +20 -0
  98. package/dist/cli/verify-proof/exec.d.mts.map +1 -0
  99. package/dist/cli/verify-proof/exec.mjs +74 -0
  100. package/dist/cli/verify-proof/exec.mjs.map +1 -0
  101. package/dist/cli/verify-proof/idl/index.d.mts +2 -0
  102. package/dist/cli/verify-proof/idl/index.d.mts.map +1 -0
  103. package/dist/cli/verify-proof/idl/index.mjs +14 -0
  104. package/dist/cli/verify-proof/idl/index.mjs.map +1 -0
  105. package/dist/cli/verify-proof/idl/types.d.ts +9 -0
  106. package/dist/cli/verify-proof/idl/types.d.ts.map +1 -0
  107. package/dist/cli/verify-proof/idl/types.js +9 -0
  108. package/dist/cli/verify-proof/idl/types.js.map +1 -0
  109. package/dist/cli/verify-proof/manifest-validator.d.mts +19 -0
  110. package/dist/cli/verify-proof/manifest-validator.d.mts.map +1 -0
  111. package/dist/cli/verify-proof/manifest-validator.mjs +182 -0
  112. package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -0
  113. package/dist/cli/verify-proof/resolver.d.mts +43 -0
  114. package/dist/cli/verify-proof/resolver.d.mts.map +1 -0
  115. package/dist/cli/verify-proof/resolver.mjs +160 -0
  116. package/dist/cli/verify-proof/resolver.mjs.map +1 -0
  117. package/dist/cli/verify-proof/runtime-detect.d.mts +27 -0
  118. package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -0
  119. package/dist/cli/verify-proof/runtime-detect.mjs +116 -0
  120. package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -0
  121. package/dist/cli/verify-proof/trust.d.mts +70 -0
  122. package/dist/cli/verify-proof/trust.d.mts.map +1 -0
  123. package/dist/cli/verify-proof/trust.mjs +174 -0
  124. package/dist/cli/verify-proof/trust.mjs.map +1 -0
  125. package/dist/plugin/.claude-plugin/plugin.json +3 -1
  126. package/dist/plugin/agents/apt-planner.md +5 -4
  127. package/dist/plugin/skills/apt/SKILL.md +75 -6
  128. package/dist/plugin/skills/apt-caveman/SKILL.md +64 -0
  129. package/dist/plugin/skills/apt-debug/SKILL.md +36 -4
  130. package/dist/plugin/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
  131. package/dist/plugin/skills/apt-discuss/SKILL.md +4 -4
  132. package/dist/plugin/skills/apt-discuss/appendices/grill-discipline.md +2 -11
  133. package/dist/plugin/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
  134. package/dist/plugin/skills/apt-execute/SKILL.md +27 -4
  135. package/dist/plugin/skills/apt-execute/appendices/tdd-mode.md +2 -10
  136. package/dist/plugin/skills/apt-fan-out/SKILL.md +36 -1
  137. package/dist/plugin/skills/apt-handoff/SKILL.md +228 -0
  138. package/dist/plugin/skills/apt-improve/DEEPENING.md +0 -8
  139. package/dist/plugin/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
  140. package/dist/plugin/skills/apt-improve/LANGUAGE.md +0 -8
  141. package/dist/plugin/skills/apt-improve/SKILL.md +4 -4
  142. package/dist/plugin/skills/apt-plan/SKILL.md +23 -5
  143. package/dist/plugin/skills/apt-plan/adapters/conductor.md +1 -1
  144. package/dist/plugin/skills/apt-prototype/LOGIC.md +0 -8
  145. package/dist/plugin/skills/apt-prototype/SKILL.md +4 -4
  146. package/dist/plugin/skills/apt-prototype/UI.md +0 -8
  147. package/dist/plugin/skills/apt-quick/SKILL.md +31 -1
  148. package/dist/plugin/skills/apt-resume/SKILL.md +54 -31
  149. package/dist/plugin/skills/apt-run/SKILL.md +114 -16
  150. package/dist/plugin/skills/apt-setup/SKILL.md +97 -8
  151. package/dist/plugin/skills/apt-ship/SKILL.md +165 -9
  152. package/dist/plugin/skills/apt-spar/SKILL.md +65 -16
  153. package/dist/plugin/skills/apt-triage/AGENT-BRIEF.md +0 -8
  154. package/dist/plugin/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
  155. package/dist/plugin/skills/apt-triage/SKILL.md +2 -2
  156. package/dist/plugin/skills/apt-update/SKILL.md +74 -17
  157. package/dist/plugin/skills/apt-verify-proof/SKILL.md +48 -1
  158. package/dist/plugin/skills/apt-zoom-out/SKILL.md +3 -3
  159. package/dist/schemas/quick-task.d.ts.map +1 -1
  160. package/dist/schemas/quick-task.js +2 -2
  161. package/dist/schemas/quick-task.js.map +1 -1
  162. package/dist/types/config.d.ts +33 -0
  163. package/dist/types/config.d.ts.map +1 -1
  164. package/dist/types/state.d.ts +1 -1
  165. package/dist/types/state.d.ts.map +1 -1
  166. package/dist/types/task-record.d.ts +1 -1
  167. package/dist/types/task-record.d.ts.map +1 -1
  168. package/package.json +134 -133
  169. package/prompts/planner.md +1 -1
  170. package/prompts/spec_writer.md +1 -1
  171. package/skills/apt/SKILL.md +75 -6
  172. package/skills/apt-caveman/SKILL.md +64 -0
  173. package/skills/apt-debug/SKILL.md +36 -4
  174. package/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
  175. package/skills/apt-discuss/SKILL.md +4 -4
  176. package/skills/apt-discuss/appendices/grill-discipline.md +2 -11
  177. package/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
  178. package/skills/apt-execute/SKILL.md +27 -4
  179. package/skills/apt-execute/appendices/tdd-mode.md +2 -10
  180. package/skills/apt-fan-out/SKILL.md +36 -1
  181. package/skills/apt-handoff/SKILL.md +228 -0
  182. package/skills/apt-improve/DEEPENING.md +0 -8
  183. package/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
  184. package/skills/apt-improve/LANGUAGE.md +0 -8
  185. package/skills/apt-improve/SKILL.md +4 -4
  186. package/skills/apt-plan/SKILL.md +23 -5
  187. package/skills/apt-plan/adapters/conductor.md +1 -1
  188. package/skills/apt-planner.md +1 -1
  189. package/skills/apt-prototype/LOGIC.md +0 -8
  190. package/skills/apt-prototype/SKILL.md +4 -4
  191. package/skills/apt-prototype/UI.md +0 -8
  192. package/skills/apt-quick/SKILL.md +31 -1
  193. package/skills/apt-resume/SKILL.md +54 -31
  194. package/skills/apt-run/SKILL.md +114 -16
  195. package/skills/apt-setup/SKILL.md +97 -8
  196. package/skills/apt-ship/SKILL.md +165 -9
  197. package/skills/apt-spar/SKILL.md +65 -16
  198. package/skills/apt-triage/AGENT-BRIEF.md +0 -8
  199. package/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
  200. package/skills/apt-triage/SKILL.md +2 -2
  201. package/skills/apt-update/SKILL.md +74 -17
  202. package/skills/apt-verify-proof/SKILL.md +48 -1
  203. package/skills/apt-zoom-out/SKILL.md +3 -3
  204. package/src/cli/commands/adr.mjs +1 -1
  205. package/src/cli/commands/audit-branch-current.mjs +250 -0
  206. package/src/cli/commands/audit.mjs +13 -2
  207. package/src/cli/commands/check-version.mjs +20 -1
  208. package/src/cli/commands/context.mjs +3 -3
  209. package/src/cli/commands/detect-runtime.mjs +134 -0
  210. package/src/cli/commands/driver-doctor.mjs +294 -0
  211. package/src/cli/commands/gate.mjs +15 -0
  212. package/src/cli/commands/init.mjs +9 -6
  213. package/src/cli/commands/install-from-source.mjs +1 -0
  214. package/src/cli/commands/modes.mjs +1 -1
  215. package/src/cli/commands/route.mjs +42 -1
  216. package/src/cli/commands/triage.mjs +1 -1
  217. package/src/cli/config/load.mjs +9 -3
  218. package/src/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
  219. package/src/cli/coordination/event-schema.mjs +19 -0
  220. package/src/cli/dispatch.mjs +17 -1
  221. package/src/cli/gate/context.mjs +20 -1
  222. package/src/cli/gate/gates/consistency-check.mjs +1 -0
  223. package/src/cli/gate/gates/review-clean.mjs +1 -0
  224. package/src/cli/gate/gates/verify-approved.mjs +1 -0
  225. package/src/cli/gate/registry.mjs +11 -1
  226. package/src/cli/install/find-workspace-framework-version.mjs +88 -0
  227. package/src/cli/install/install-from-source.mjs +276 -0
  228. package/src/cli/install/install-kernel.mjs +24 -0
  229. package/src/cli/install/legacy-paths.mjs +162 -39
  230. package/src/cli/install/runtime-detect.mjs +1 -1
  231. package/src/cli/install/runtime-migrate.mjs +63 -30
  232. package/src/cli/install/transforms/codex.mjs +26 -17
  233. package/src/cli/skill-author/contract.mjs +2 -2
  234. package/src/cli/verify-proof/.gitkeep +0 -0
  235. package/src/cli/verify-proof/audit.mjs +55 -0
  236. package/src/cli/verify-proof/exec.mjs +74 -0
  237. package/src/cli/verify-proof/idl/index.mjs +24 -0
  238. package/src/cli/verify-proof/idl/types.ts +41 -0
  239. package/src/cli/verify-proof/manifest-schema.json +211 -0
  240. package/src/cli/verify-proof/manifest-validator.mjs +184 -0
  241. package/src/cli/verify-proof/resolver.mjs +163 -0
  242. package/src/cli/verify-proof/runtime-detect.mjs +122 -0
  243. package/src/cli/verify-proof/trust.mjs +187 -0
  244. package/templates/adr-format.md +0 -8
  245. package/templates/aperant-claude-md-appendix.md +1 -1
  246. package/templates/context-format.md +1 -9
  247. package/templates/proof-verification.md +19 -5
  248. package/workflows/verify-proof.md +56 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/exec.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEzC;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,SAAS;IAC1C,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IACjG,MAAM,GAAG,GAAG,sCAAsC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9D,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,EAAE,GAAG,sCAAsC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACrE,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;IACxC,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE;IAC5E,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;IACpC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACd,4FAA4F,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACvH,CAAA;IACF,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,aAAa,CAAA;IAChD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oDAAoD,OAAO,GAAG,EAAE,CAAC,CAAA;QAClF,CAAC;IACF,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,EAAE;QACrD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,uEAAuE;QACvE,4DAA4D;QAC5D,KAAK,EAAE,KAAK;KACZ,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ASSERTION_VERBS, ASYNC_VERBS, EVIDENCE_VERBS, IDL_VERB_ARGS, IDL_VERB_NAMES, INTERACTION_VERBS, isVerbResult, LIFECYCLE_VERBS, validateVerbArgs } from "@aperant/driver-sdk";
2
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/index.mjs"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * idl/index.mjs — framework-side re-export of the IDL v1 runtime registry.
3
+ *
4
+ * The SINGLE SOURCE OF TRUTH lives in `@aperant/driver-sdk` (idl.ts) — see
5
+ * ID-04 in spec.md. This file just re-exports those runtime values so
6
+ * framework-internal callers (bundled drivers, resolver, driver-doctor,
7
+ * conformance kit) can import from the existing relative path without
8
+ * paying the cost of refactoring every callsite.
9
+ *
10
+ * If you add a verb, edit packages/framework-driver-sdk/src/idl.ts. This
11
+ * file requires no maintenance.
12
+ */
13
+ export { ASSERTION_VERBS, ASYNC_VERBS, EVIDENCE_VERBS, IDL_VERB_ARGS, IDL_VERB_NAMES, INTERACTION_VERBS, isVerbResult, LIFECYCLE_VERBS, validateVerbArgs, } from '@aperant/driver-sdk';
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/index.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACN,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,gBAAgB,GAChB,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * idl/types.ts — re-export the SDK's IDL types for framework-internal use.
3
+ *
4
+ * Single source of truth lives in `@aperant/driver-sdk/idl.ts`. Framework
5
+ * code imports from here so future moves (e.g. an internal-only IDL
6
+ * extension) only touch this re-export, not every call site.
7
+ */
8
+ export type { AssertNetworkArgs, AssertOutputArgs, AssertTextArgs, AssertVisibleArgs, AwaitSignalArgs, CaptureLogsArgs, ClickArgs, DomDumpArgs, DragDropArgs, DriverModule, DumpStateArgs, ExecuteJsArgs, Handle, IdlVerbName, KeyArgs, LaunchArgs, NavigateArgs, RecordVideoArgs, ScreenshotArgs, SelectArgs, SwipeArgs, SwitchContextArgs, Target, TargetKind, TeardownArgs, TriggerArgs, TypeArgs, UploadFileArgs, VerbResult, WaitForEventArgs, WaitForIdleArgs, } from '@aperant/driver-sdk';
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACX,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,MAAM,EACN,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,eAAe,GACf,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * idl/types.ts — re-export the SDK's IDL types for framework-internal use.
3
+ *
4
+ * Single source of truth lives in `@aperant/driver-sdk/idl.ts`. Framework
5
+ * code imports from here so future moves (e.g. an internal-only IDL
6
+ * extension) only touch this re-export, not every call site.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/verify-proof/idl/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,19 @@
1
+ /** Read the bundled manifest-schema.json. */
2
+ export function loadManifestSchema(): any;
3
+ /**
4
+ * Validate a manifest object against the bundled schema.
5
+ *
6
+ * @param {unknown} manifest — usually JSON.parse(manifest.json contents).
7
+ * @param {object} [schema] — override the bundled schema (used by tests).
8
+ * @returns {{valid: true} | {valid: false, errors: Array<{path: string, message: string}>}}
9
+ */
10
+ export function validateManifest(manifest: unknown, schema?: object): {
11
+ valid: true;
12
+ } | {
13
+ valid: false;
14
+ errors: Array<{
15
+ path: string;
16
+ message: string;
17
+ }>;
18
+ };
19
+ //# sourceMappingURL=manifest-validator.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-validator.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"AA2BA,6CAA6C;AAC7C,0CAKC;AAED;;;;;;GAMG;AACH,2CAJW,OAAO,WACP,MAAM,GACJ;IAAC,KAAK,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAQ1F"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * manifest-validator.mjs — hand-rolled JSON-Schema subset validator.
3
+ *
4
+ * Validates driver manifests against manifest-schema.json. Implements
5
+ * exactly the JSON-Schema keywords we need:
6
+ *
7
+ * type / required / properties / items / enum / const / pattern / oneOf
8
+ *
9
+ * Returns { valid: true } or { valid: false, errors: [{ path, message }] }
10
+ * where `path` is a JSON-pointer (`/transport/local_command/binary`).
11
+ *
12
+ * No external deps — keeps the validator installable as `dist/` with the
13
+ * framework package and avoids dragging ajv (or any v5+ JSON-Schema
14
+ * validator) into the runtime surface for ~80 lines of validator code per
15
+ * AC15. We don't need allOf / anyOf / definitions — manifest-schema.json
16
+ * is intentionally a thin contract.
17
+ */
18
+ import { readFileSync } from 'node:fs';
19
+ import { dirname, join } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ /** Lazy-loaded JSON-Schema (read once on first call). */
23
+ let cachedSchema = null;
24
+ /** Read the bundled manifest-schema.json. */
25
+ export function loadManifestSchema() {
26
+ if (cachedSchema !== null)
27
+ return cachedSchema;
28
+ const schemaPath = join(__dirname, 'manifest-schema.json');
29
+ cachedSchema = JSON.parse(readFileSync(schemaPath, 'utf-8'));
30
+ return cachedSchema;
31
+ }
32
+ /**
33
+ * Validate a manifest object against the bundled schema.
34
+ *
35
+ * @param {unknown} manifest — usually JSON.parse(manifest.json contents).
36
+ * @param {object} [schema] — override the bundled schema (used by tests).
37
+ * @returns {{valid: true} | {valid: false, errors: Array<{path: string, message: string}>}}
38
+ */
39
+ export function validateManifest(manifest, schema) {
40
+ const root = schema ?? loadManifestSchema();
41
+ const errors = [];
42
+ validateNode(manifest, root, '', errors);
43
+ if (errors.length === 0)
44
+ return { valid: true };
45
+ return { valid: false, errors };
46
+ }
47
+ /** Type check — JSON-Schema's union of "string", "number", "object", "array", "boolean", "null". */
48
+ function checkType(value, type) {
49
+ if (type === 'string')
50
+ return typeof value === 'string';
51
+ if (type === 'number')
52
+ return typeof value === 'number' && !Number.isNaN(value);
53
+ if (type === 'integer')
54
+ return typeof value === 'number' && Number.isInteger(value);
55
+ if (type === 'boolean')
56
+ return typeof value === 'boolean';
57
+ if (type === 'null')
58
+ return value === null;
59
+ if (type === 'array')
60
+ return Array.isArray(value);
61
+ if (type === 'object') {
62
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
63
+ }
64
+ return false;
65
+ }
66
+ /**
67
+ * Human-readable name for the actual shape of a value. Distinguishes
68
+ * `null`, `array`, and plain `object` — JS `typeof` reports all three as
69
+ * `'object'`, which makes error messages like "expected type object, got
70
+ * object" misleading.
71
+ *
72
+ * @param {unknown} value
73
+ * @returns {string}
74
+ */
75
+ function describeType(value) {
76
+ if (value === null)
77
+ return 'null';
78
+ if (Array.isArray(value))
79
+ return 'array';
80
+ return typeof value;
81
+ }
82
+ /**
83
+ * Recursive validator. `errors` is mutated.
84
+ *
85
+ * @param {unknown} value
86
+ * @param {object} schema
87
+ * @param {string} path — JSON-pointer
88
+ * @param {Array<{path: string, message: string}>} errors
89
+ */
90
+ function validateNode(value, schema, path, errors) {
91
+ // const
92
+ if ('const' in schema) {
93
+ if (value !== schema.const) {
94
+ errors.push({
95
+ path: path || '/',
96
+ message: `expected const ${JSON.stringify(schema.const)}, got ${JSON.stringify(value)}`,
97
+ });
98
+ return;
99
+ }
100
+ }
101
+ // type
102
+ if (schema.type !== undefined) {
103
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
104
+ if (!types.some((t) => checkType(value, t))) {
105
+ errors.push({
106
+ path: path || '/',
107
+ message: `expected type ${types.join('|')}, got ${describeType(value)}`,
108
+ });
109
+ return;
110
+ }
111
+ }
112
+ // enum
113
+ if (Array.isArray(schema.enum)) {
114
+ if (!schema.enum.includes(value)) {
115
+ errors.push({
116
+ path: path || '/',
117
+ message: `value ${JSON.stringify(value)} not in enum [${schema.enum.join(', ')}]`,
118
+ });
119
+ return;
120
+ }
121
+ }
122
+ // pattern
123
+ if (typeof schema.pattern === 'string' && typeof value === 'string') {
124
+ const re = new RegExp(schema.pattern);
125
+ if (!re.test(value)) {
126
+ errors.push({
127
+ path: path || '/',
128
+ message: `value ${JSON.stringify(value)} does not match pattern ${schema.pattern}`,
129
+ });
130
+ return;
131
+ }
132
+ }
133
+ // oneOf
134
+ if (Array.isArray(schema.oneOf)) {
135
+ let matchCount = 0;
136
+ const branchErrors = [];
137
+ for (let i = 0; i < schema.oneOf.length; i++) {
138
+ const sub = schema.oneOf[i];
139
+ const subErrors = [];
140
+ validateNode(value, sub, path, subErrors);
141
+ if (subErrors.length === 0)
142
+ matchCount++;
143
+ else
144
+ branchErrors.push({ branch: i, errors: subErrors });
145
+ }
146
+ if (matchCount !== 1) {
147
+ errors.push({
148
+ path: path || '/',
149
+ message: matchCount === 0
150
+ ? `oneOf: value matched no branch (${branchErrors.length} branches tried)`
151
+ : `oneOf: value matched ${matchCount} branches (must match exactly 1)`,
152
+ });
153
+ return;
154
+ }
155
+ }
156
+ // object validation
157
+ if (checkType(value, 'object')) {
158
+ const obj = /** @type {Record<string, unknown>} */ (value);
159
+ if (Array.isArray(schema.required)) {
160
+ for (const key of schema.required) {
161
+ if (!(key in obj)) {
162
+ errors.push({ path: `${path}/${key}`, message: `required property "${key}" missing` });
163
+ }
164
+ }
165
+ }
166
+ if (schema.properties && typeof schema.properties === 'object') {
167
+ for (const [key, subSchema] of Object.entries(schema.properties)) {
168
+ if (key in obj) {
169
+ validateNode(obj[key], /** @type {object} */ (subSchema), `${path}/${key}`, errors);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ // array validation
175
+ if (checkType(value, 'array') && schema.items) {
176
+ const arr = /** @type {unknown[]} */ (value);
177
+ for (let i = 0; i < arr.length; i++) {
178
+ validateNode(arr[i], schema.items, `${path}/${i}`, errors);
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=manifest-validator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-validator.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Score a single driver against the project's runtime + required capabilities.
3
+ *
4
+ * @param {DriverManifest & {locality?: 'bundled'|'user'|'registry'}} manifest
5
+ * @param {RuntimeCapabilities} runtime
6
+ * @param {string[]} required
7
+ * @returns {{score: number[], reason?: string}}
8
+ */
9
+ export function scoreDriver(manifest: DriverManifest & {
10
+ locality?: "bundled" | "user" | "registry";
11
+ }, runtime: RuntimeCapabilities, required: string[]): {
12
+ score: number[];
13
+ reason?: string;
14
+ };
15
+ /**
16
+ * Resolve the best driver for a given (runtime, drivers, override, required)
17
+ * tuple.
18
+ *
19
+ * @param {Object} opts
20
+ * @param {DriverManifest[]} opts.drivers — manifests of every discovered driver.
21
+ * @param {RuntimeCapabilities} opts.runtime — project's runtime capabilities.
22
+ * @param {string[]} opts.required_capabilities — IDL verbs the test needs.
23
+ * @param {string[]} [opts.required_stability] — accepted stability values; default ['ga'].
24
+ * @param {string[]} [opts.override] — config.json:verification.runtimes[]: explicit driverId precedence.
25
+ * @returns {{selected: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}}
26
+ * @throws {UnsatisfiedRequiredCapabilityError} when no driver satisfies a REQUIRED capability.
27
+ */
28
+ export function resolveDriver(opts: {
29
+ drivers: DriverManifest[];
30
+ runtime: RuntimeCapabilities;
31
+ required_capabilities: string[];
32
+ required_stability?: string[] | undefined;
33
+ override?: string[] | undefined;
34
+ }): {
35
+ selected: DriverManifest;
36
+ fallback_attempts: Array<{
37
+ driver_id: string;
38
+ reason: string;
39
+ }>;
40
+ };
41
+ export type DriverManifest = import("@aperant/driver-sdk").DriverManifest;
42
+ export type RuntimeCapabilities = import("./runtime-detect.mjs").RuntimeCapabilities;
43
+ //# sourceMappingURL=resolver.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"AA8BA;;;;;;;GAOG;AACH,sCALW,cAAc,GAAG;IAAC,QAAQ,CAAC,EAAE,SAAS,GAAC,MAAM,GAAC,UAAU,CAAA;CAAC,WACzD,mBAAmB,YACnB,MAAM,EAAE,GACN;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAU9C;AA0CD;;;;;;;;;;;;GAYG;AACH,oCARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IACJ,qBAAqB,EAApC,MAAM,EAAE;IACQ,kBAAkB;IAClB,QAAQ;CAChC,GAAU;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAgErG;6BA3IY,OAAO,qBAAqB,EAAE,cAAc;kCAC5C,OAAO,sBAAsB,EAAE,mBAAmB"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * resolver.mjs — driver selection + fallback chain.
3
+ *
4
+ * Given a project's runtime capabilities, the discovered drivers, and the
5
+ * test's required IDL capabilities, return the best driver — or throw
6
+ * UnsatisfiedRequiredCapabilityError if no driver in the chain satisfies
7
+ * a REQUIRED capability (ID-02 fail-closed).
8
+ *
9
+ * Scoring (ID-02, ordered high → low):
10
+ * 1. capability_coverage — how many required capabilities the driver has
11
+ * 2. compatibility — does the runtime match the manifest.targets?
12
+ * 3. stability — ga > beta > experimental
13
+ * 4. priority — higher wins (manifest.priority)
14
+ * 5. locality — bundled (packages/framework/drivers/) > user-installed
15
+ * (.aperant/drivers/) > registry (.aperant/registry-cache/)
16
+ *
17
+ * Ties are broken by the next dimension; if every dimension is equal the
18
+ * driver with the lexicographically smaller driverId wins (deterministic).
19
+ */
20
+ import { UnsatisfiedRequiredCapabilityError } from '@aperant/driver-sdk';
21
+ /**
22
+ * @typedef {import('@aperant/driver-sdk').DriverManifest} DriverManifest
23
+ * @typedef {import('./runtime-detect.mjs').RuntimeCapabilities} RuntimeCapabilities
24
+ */
25
+ const STABILITY_RANK = { ga: 3, beta: 2, experimental: 1 };
26
+ const LOCALITY_RANK = { bundled: 3, user: 2, registry: 1 };
27
+ /**
28
+ * Score a single driver against the project's runtime + required capabilities.
29
+ *
30
+ * @param {DriverManifest & {locality?: 'bundled'|'user'|'registry'}} manifest
31
+ * @param {RuntimeCapabilities} runtime
32
+ * @param {string[]} required
33
+ * @returns {{score: number[], reason?: string}}
34
+ */
35
+ export function scoreDriver(manifest, runtime, required) {
36
+ const caps = new Set(manifest.capabilities ?? []);
37
+ const coverage = required.filter((c) => caps.has(c)).length;
38
+ const compatibility = matchesRuntime(manifest, runtime) ? 1 : 0;
39
+ const stability = STABILITY_RANK[manifest.stability] ?? 0;
40
+ const priority = manifest.priority ?? 0;
41
+ const locality = LOCALITY_RANK[manifest.locality ?? 'bundled'] ?? 0;
42
+ return { score: [coverage, compatibility, stability, priority, locality] };
43
+ }
44
+ /**
45
+ * Whether a manifest's targets[] mentions a runtime the project has.
46
+ *
47
+ * @param {DriverManifest} manifest
48
+ * @param {RuntimeCapabilities} runtime
49
+ * @returns {boolean}
50
+ */
51
+ function matchesRuntime(manifest, runtime) {
52
+ const targets = manifest.targets ?? [];
53
+ for (const t of targets) {
54
+ // Strip any version range suffix (e.g. "electron@>=25" → "electron").
55
+ const stripped = String(t).split('@')[0].toLowerCase();
56
+ if (stripped === 'electron' && runtime.is_electron)
57
+ return true;
58
+ if (stripped === 'tauri' && runtime.is_tauri)
59
+ return true;
60
+ if ((stripped === 'browser' || stripped === 'web') && runtime.is_web_frontend)
61
+ return true;
62
+ if (stripped === 'next' && runtime.is_nextjs)
63
+ return true;
64
+ if (stripped === 'nuxt' && runtime.is_nuxt)
65
+ return true;
66
+ if (stripped === 'expo' && runtime.is_expo)
67
+ return true;
68
+ if (stripped === 'react-native' && runtime.is_react_native)
69
+ return true;
70
+ if (stripped === 'node' && runtime.has_node)
71
+ return true;
72
+ if (stripped === 'cli' && runtime.has_node)
73
+ return true;
74
+ if (stripped === 'api' && runtime.has_node)
75
+ return true;
76
+ if (stripped === 'fake')
77
+ return true; // fixture-only — always matches
78
+ }
79
+ return false;
80
+ }
81
+ /**
82
+ * Compare two driver-score tuples lexicographically.
83
+ * @param {number[]} a
84
+ * @param {number[]} b
85
+ * @returns {number}
86
+ */
87
+ function compareScores(a, b) {
88
+ for (let i = 0; i < Math.min(a.length, b.length); i++) {
89
+ if (a[i] !== b[i])
90
+ return b[i] - a[i]; // higher wins
91
+ }
92
+ return 0;
93
+ }
94
+ /**
95
+ * Resolve the best driver for a given (runtime, drivers, override, required)
96
+ * tuple.
97
+ *
98
+ * @param {Object} opts
99
+ * @param {DriverManifest[]} opts.drivers — manifests of every discovered driver.
100
+ * @param {RuntimeCapabilities} opts.runtime — project's runtime capabilities.
101
+ * @param {string[]} opts.required_capabilities — IDL verbs the test needs.
102
+ * @param {string[]} [opts.required_stability] — accepted stability values; default ['ga'].
103
+ * @param {string[]} [opts.override] — config.json:verification.runtimes[]: explicit driverId precedence.
104
+ * @returns {{selected: DriverManifest, fallback_attempts: Array<{driver_id: string, reason: string}>}}
105
+ * @throws {UnsatisfiedRequiredCapabilityError} when no driver satisfies a REQUIRED capability.
106
+ */
107
+ export function resolveDriver(opts) {
108
+ const drivers = opts.drivers ?? [];
109
+ const runtime = opts.runtime;
110
+ const required = opts.required_capabilities ?? [];
111
+ const stabilityFilter = new Set(opts.required_stability ?? ['ga']);
112
+ const override = opts.override ?? [];
113
+ const fallback = [];
114
+ // Apply override precedence first (config-listed driverIds come first).
115
+ const overrideOrdered = [];
116
+ const overrideSet = new Set(override);
117
+ for (const id of override) {
118
+ const d = drivers.find((m) => m.driverId === id);
119
+ if (d)
120
+ overrideOrdered.push(d);
121
+ }
122
+ const remaining = drivers.filter((m) => !overrideSet.has(m.driverId));
123
+ const ordered = [...overrideOrdered, ...remaining];
124
+ // Filter by stability; rejected drivers go into fallback_attempts.
125
+ const stableOnly = [];
126
+ for (const d of ordered) {
127
+ if (!stabilityFilter.has(d.stability)) {
128
+ fallback.push({
129
+ driver_id: d.driverId,
130
+ reason: `stability ${d.stability} not in allowed set [${[...stabilityFilter].join(', ')}]`,
131
+ });
132
+ continue;
133
+ }
134
+ stableOnly.push(d);
135
+ }
136
+ // Score every survivor against required capabilities.
137
+ const scored = stableOnly.map((m) => ({ manifest: m, ...scoreDriver(m, runtime, required) }));
138
+ // Sort highest-first, tie-break on driverId for determinism.
139
+ scored.sort((a, b) => {
140
+ const cmp = compareScores(a.score, b.score);
141
+ if (cmp !== 0)
142
+ return cmp;
143
+ return a.manifest.driverId.localeCompare(b.manifest.driverId);
144
+ });
145
+ // Pick the top scorer that covers EVERY required capability. Others go into fallback.
146
+ for (const candidate of scored) {
147
+ const caps = new Set(candidate.manifest.capabilities ?? []);
148
+ const missing = required.filter((c) => !caps.has(c));
149
+ if (missing.length === 0) {
150
+ return { selected: candidate.manifest, fallback_attempts: fallback };
151
+ }
152
+ fallback.push({
153
+ driver_id: candidate.manifest.driverId,
154
+ reason: `missing required capabilities: ${missing.join(', ')}`,
155
+ });
156
+ }
157
+ // Exhausted the chain — fail closed (ID-02).
158
+ throw new UnsatisfiedRequiredCapabilityError(`No driver in the chain satisfies every required capability: [${required.join(', ')}]`, required[0], fallback);
159
+ }
160
+ //# sourceMappingURL=resolver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Detect runtime capabilities from a parsed package.json object.
3
+ *
4
+ * @param {Record<string, unknown> | null} packageJson
5
+ * @returns {RuntimeCapabilities}
6
+ */
7
+ export function detectFromPackageJson(packageJson: Record<string, unknown> | null): RuntimeCapabilities;
8
+ /**
9
+ * Load and detect capabilities from a project directory's package.json.
10
+ * Returns empty capabilities if no package.json exists (malformed or
11
+ * missing — both cases fall through to "nothing detected").
12
+ *
13
+ * @param {string} projectDir
14
+ * @returns {RuntimeCapabilities}
15
+ */
16
+ export function loadRuntimeCapabilities(projectDir: string): RuntimeCapabilities;
17
+ export type RuntimeCapabilities = {
18
+ is_electron: boolean;
19
+ is_tauri: boolean;
20
+ is_nextjs: boolean;
21
+ is_nuxt: boolean;
22
+ is_web_frontend: boolean;
23
+ is_expo: boolean;
24
+ is_react_native: boolean;
25
+ has_node: boolean;
26
+ };
27
+ //# sourceMappingURL=runtime-detect.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-detect.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/runtime-detect.mjs"],"names":[],"mappings":"AAyCA;;;;;GAKG;AACH,mDAHW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5B,mBAAmB,CAwD/B;AAED;;;;;;;GAOG;AACH,oDAHW,MAAM,GACJ,mBAAmB,CAY/B;;iBAxGa,OAAO;cACP,OAAO;eACP,OAAO;aACP,OAAO;qBACP,OAAO;aACP,OAAO;qBACP,OAAO;cACP,OAAO"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * runtime-detect.mjs — pure project-shape capability detection.
3
+ *
4
+ * Extracted from packages/core/src/prompts/prompt-loader.ts:572-595 so the
5
+ * framework CLI is self-contained (no @aperant/core dep). Same heuristics:
6
+ * read package.json's dependencies + devDependencies, return a capability
7
+ * record the resolver can score against.
8
+ *
9
+ * Pattern: pure data in → pure data out. No filesystem walking, no exec.
10
+ * Use loadRuntimeCapabilities(projectDir) for the cwd-rooted variant.
11
+ */
12
+ import { existsSync, readFileSync } from 'node:fs';
13
+ import { join, resolve } from 'node:path';
14
+ /**
15
+ * @typedef {Object} RuntimeCapabilities
16
+ * @property {boolean} is_electron
17
+ * @property {boolean} is_tauri
18
+ * @property {boolean} is_nextjs
19
+ * @property {boolean} is_nuxt
20
+ * @property {boolean} is_web_frontend
21
+ * @property {boolean} is_expo
22
+ * @property {boolean} is_react_native
23
+ * @property {boolean} has_node
24
+ */
25
+ /** A capability record with every flag defaulted to false. */
26
+ function emptyCapabilities() {
27
+ return {
28
+ is_electron: false,
29
+ is_tauri: false,
30
+ is_nextjs: false,
31
+ is_nuxt: false,
32
+ is_web_frontend: false,
33
+ is_expo: false,
34
+ is_react_native: false,
35
+ has_node: false,
36
+ };
37
+ }
38
+ /**
39
+ * Detect runtime capabilities from a parsed package.json object.
40
+ *
41
+ * @param {Record<string, unknown> | null} packageJson
42
+ * @returns {RuntimeCapabilities}
43
+ */
44
+ export function detectFromPackageJson(packageJson) {
45
+ const capabilities = emptyCapabilities();
46
+ if (packageJson === null || typeof packageJson !== 'object')
47
+ return capabilities;
48
+ const allDeps = {
49
+ ...(packageJson.dependencies ?? {}) /** @type {Record<string,string>} */,
50
+ ...(packageJson.devDependencies ?? {}) /** @type {Record<string,string>} */,
51
+ };
52
+ const deps = new Set(Object.keys(allDeps).map((k) => k.toLowerCase()));
53
+ if (deps.has('electron') || [...deps].some((d) => d.startsWith('@electron'))) {
54
+ capabilities.is_electron = true;
55
+ }
56
+ if (deps.has('@tauri-apps/api') || deps.has('tauri')) {
57
+ capabilities.is_tauri = true;
58
+ }
59
+ if (deps.has('expo'))
60
+ capabilities.is_expo = true;
61
+ if (deps.has('react-native'))
62
+ capabilities.is_react_native = true;
63
+ // Web frontends — react/vue/svelte/angular/solid → frontend. BUT: an
64
+ // Electron app commonly bundles React as its renderer; in that case the
65
+ // runtime is "electron", not "web_frontend". Electron + react-native +
66
+ // expo + tauri all win over the web flag.
67
+ const isNativeContainer = capabilities.is_electron ||
68
+ capabilities.is_tauri ||
69
+ capabilities.is_react_native ||
70
+ capabilities.is_expo;
71
+ const webFrameworks = ['react', 'vue', 'svelte', 'angular', 'solid'];
72
+ if (!isNativeContainer && webFrameworks.some((f) => deps.has(f))) {
73
+ capabilities.is_web_frontend = true;
74
+ }
75
+ if (deps.has('next')) {
76
+ capabilities.is_nextjs = true;
77
+ capabilities.is_web_frontend = true;
78
+ }
79
+ if (deps.has('nuxt')) {
80
+ capabilities.is_nuxt = true;
81
+ capabilities.is_web_frontend = true;
82
+ }
83
+ if (deps.has('vite') && !isNativeContainer) {
84
+ capabilities.is_web_frontend = true;
85
+ }
86
+ // Node-ish? Anything with a package.json + an entry point counts.
87
+ if (typeof packageJson.main === 'string' || typeof packageJson.module === 'string') {
88
+ capabilities.has_node = true;
89
+ }
90
+ if (!capabilities.has_node && packageJson.scripts && typeof packageJson.scripts === 'object') {
91
+ capabilities.has_node = true;
92
+ }
93
+ return capabilities;
94
+ }
95
+ /**
96
+ * Load and detect capabilities from a project directory's package.json.
97
+ * Returns empty capabilities if no package.json exists (malformed or
98
+ * missing — both cases fall through to "nothing detected").
99
+ *
100
+ * @param {string} projectDir
101
+ * @returns {RuntimeCapabilities}
102
+ */
103
+ export function loadRuntimeCapabilities(projectDir) {
104
+ const pkgPath = join(resolve(projectDir), 'package.json');
105
+ if (!existsSync(pkgPath))
106
+ return emptyCapabilities();
107
+ let parsed;
108
+ try {
109
+ parsed = JSON.parse(readFileSync(pkgPath, 'utf-8'));
110
+ }
111
+ catch {
112
+ return emptyCapabilities();
113
+ }
114
+ return detectFromPackageJson(parsed);
115
+ }
116
+ //# sourceMappingURL=runtime-detect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-detect.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/runtime-detect.mjs"],"names":[],"mappings":"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"}