failproofai 1.0.7-beta.2 → 1.0.7

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 (252) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +4 -4
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js +4 -4
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page.js +4 -4
  16. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/audit/run/route.js +7 -8
  25. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  33. package/.next/standalone/.next/server/app/audit/page.js +5 -7
  34. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/index.html +1 -1
  37. package/.next/standalone/.next/server/app/index.rsc +15 -15
  38. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  39. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  40. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  42. package/.next/standalone/.next/server/app/page.js +6 -6
  43. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  46. package/.next/standalone/.next/server/app/policies/page.js +11 -13
  47. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  50. package/.next/standalone/.next/server/app/project/[name]/page.js +7 -8
  51. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  54. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  55. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +7 -7
  56. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  59. package/.next/standalone/.next/server/app/projects/page.js +6 -7
  60. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -41
  63. package/.next/standalone/.next/server/app/settings/page.js +9 -12
  64. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/chunks/{[externals]__1j-zsg5._.js → [externals]__1_bftcl._.js} +1 -1
  67. package/.next/standalone/.next/server/chunks/{[externals]__19_pzeq._.js → [externals]__1msfs-h._.js} +1 -1
  68. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +2 -2
  69. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  70. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1bf34x4._.js → [root-of-the-server]__1_r2rbg._.js} +7 -5
  71. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +21 -21
  72. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/{_1q5i8mb._.js → _1c3k-8x._.js} +2 -2
  75. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +16 -16
  76. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  77. package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +2 -4
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_ki57._.js +4 -0
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +4 -0
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +4 -0
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +4 -0
  83. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0l44ual._.js → [root-of-the-server]__0bd3mje._.js} +2 -2
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cg-bgc._.js +5 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cpu_mj._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1mf3zp6._.js → [root-of-the-server]__0cxe_2_._.js} +3 -3
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +4 -0
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +4 -0
  89. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +4 -0
  90. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3w0ll._.js +22 -0
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17d_ffl._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19d9tgz._.js +5 -0
  93. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ctpynv._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jiwfsj._.js +3 -0
  95. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +4 -0
  96. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1phc187._.js +3 -0
  97. package/.next/standalone/.next/server/chunks/ssr/_06imw3p._.js +5 -0
  98. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/{_1w_5l7t._.js → _0h_douw._.js} +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/{_1mel6y1._.js → _1-i_gzc._.js} +2 -2
  101. package/.next/standalone/.next/server/chunks/ssr/{_1v-jvrv._.js → _166t73i._.js} +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/{_1q46vxx._.js → _1_qswah._.js} +2 -2
  103. package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifp._.js → _1es2j7i._.js} +5 -5
  104. package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +2 -2
  107. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +3 -0
  111. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_0w6mzq5._.js → node_modules_next_dist_0drixxt._.js} +4 -4
  112. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +10 -0
  113. package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
  114. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me65._.js +1 -1
  116. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  117. package/.next/standalone/.next/server/pages/404.html +1 -1
  118. package/.next/standalone/.next/server/pages/500.html +1 -1
  119. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/server-reference-manifest.json +23 -56
  121. package/.next/standalone/.next/static/chunks/094xgi4owxaqf.js +1 -0
  122. package/.next/standalone/.next/static/chunks/{129ag2bw93bdh.js → 0__8a7m868fvf.js} +1 -1
  123. package/.next/standalone/.next/static/chunks/{3ugmd_7dyn0id.js → 0o6qlkgubtoex.js} +1 -1
  124. package/.next/standalone/.next/static/chunks/{0fqd7m_u81mi5.js → 13i7-9is-vhys.js} +1 -1
  125. package/.next/standalone/.next/static/chunks/1rz20_pz828f3.js +6 -0
  126. package/.next/standalone/.next/static/chunks/2k9f4tyv04809.css +1 -0
  127. package/.next/standalone/.next/static/chunks/{2_pltstd8-xgs.js → 2klitrtzpaoe0.js} +1 -1
  128. package/.next/standalone/.next/static/chunks/{3brze37td_wnc.js → 2mdh397ghgnvv.js} +1 -1
  129. package/.next/standalone/.next/static/chunks/2rshywgeqsyzk.css +2 -0
  130. package/.next/standalone/.next/static/chunks/3pzx4chkhko9k.js +1 -0
  131. package/.next/standalone/.next/static/chunks/3rh5o7e16irrm.js +69 -0
  132. package/.next/standalone/.next/static/chunks/{1qd741hzlmjbo.js → 43ufqrz8qo3h-.js} +1 -1
  133. package/.next/standalone/SECURITY.md +53 -0
  134. package/.next/standalone/app/actions/pack-actions.ts +0 -12
  135. package/.next/standalone/app/policies/hooks-client.tsx +0 -9
  136. package/.next/standalone/app/settings/page.tsx +1 -20
  137. package/.next/standalone/app/settings/settings-client.tsx +1 -27
  138. package/.next/standalone/app/settings/settings.css +0 -79
  139. package/.next/standalone/package.json +10 -10
  140. package/.next/standalone/sdk/typescript/CHANGELOG.md +15 -1
  141. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +10 -30
  142. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +3 -0
  143. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +4 -16
  144. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +3 -0
  145. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +13 -132
  146. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +4 -0
  147. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +4 -142
  148. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +4 -0
  149. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +1396 -1016
  150. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +9 -0
  151. package/.next/standalone/server.js +1 -1
  152. package/README.md +2 -2
  153. package/bin/failproofai.mjs +2 -115
  154. package/dist/cli.mjs +6543 -13872
  155. package/dist/index.js +1 -19
  156. package/dist/worker.mjs +2022 -8055
  157. package/package.json +10 -10
  158. package/pi-extension/index.ts +0 -11
  159. package/scripts/build-policy-pack.mjs +2 -53
  160. package/src/audit/features.ts +2 -3
  161. package/src/hooks/builtin-policies.ts +8 -177
  162. package/src/hooks/cloud-enrollment-cli.ts +1 -1
  163. package/src/hooks/cloud-managed-policies.ts +0 -22
  164. package/src/hooks/custom-hooks-loader.ts +7 -45
  165. package/src/hooks/custom-hooks-registry.ts +1 -45
  166. package/src/hooks/first-run-gate.ts +0 -5
  167. package/src/hooks/fp-home.ts +0 -23
  168. package/src/hooks/handler.ts +6 -265
  169. package/src/hooks/hook-activity-store.ts +1 -105
  170. package/src/hooks/hook-telemetry.ts +0 -41
  171. package/src/hooks/loader-utils.ts +0 -6
  172. package/src/hooks/manager.ts +1 -1
  173. package/src/hooks/pack-cli.ts +19 -412
  174. package/src/hooks/pack-manifest.ts +7 -479
  175. package/src/hooks/pack-store.ts +11 -157
  176. package/src/hooks/policy-catalog.ts +0 -204
  177. package/src/hooks/policy-evaluator.ts +796 -940
  178. package/src/hooks/policy-registry.ts +0 -25
  179. package/src/hooks/policy-types.ts +0 -126
  180. package/src/hooks/types.ts +1 -1
  181. package/src/hooks/worker-server.ts +26 -119
  182. package/src/index.ts +0 -6
  183. package/.next/standalone/.next/server/chunks/src_hooks_01frwmb._.js +0 -5
  184. package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +0 -3
  185. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bmjsj._.js +0 -3
  186. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +0 -4
  187. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +0 -4
  188. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__059yza8._.js +0 -3
  189. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eip4_k._.js +0 -22
  190. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +0 -4
  191. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qcb0mg._.js +0 -3
  192. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qxnccm._.js +0 -5
  193. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +0 -4
  194. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +0 -4
  195. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0soxz2z._.js +0 -3
  196. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +0 -3
  197. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +0 -4
  198. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +0 -3
  199. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1dinjii._.js +0 -3
  200. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +0 -4
  201. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +0 -4
  202. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qiz0e4._.js +0 -3
  203. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +0 -3
  204. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +0 -3
  205. package/.next/standalone/.next/server/chunks/ssr/_0uyu3jf._.js +0 -3
  206. package/.next/standalone/.next/server/chunks/ssr/_1feuvhb._.js +0 -5
  207. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +0 -3
  208. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +0 -3
  209. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_18_d8l1._.js +0 -151
  210. package/.next/standalone/.next/server/chunks/ssr/src_hooks_095a_79._.js +0 -5
  211. package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +0 -3
  212. package/.next/standalone/.next/server/chunks/ssr/src_hooks_18k8rl0._.js +0 -12
  213. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +0 -3
  214. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +0 -3
  215. package/.next/standalone/.next/static/chunks/043j99m8ykg__.css +0 -2
  216. package/.next/standalone/.next/static/chunks/2c8j9l6j_b1ci.js +0 -1
  217. package/.next/standalone/.next/static/chunks/2qv4hshejedtx.css +0 -1
  218. package/.next/standalone/.next/static/chunks/3-k569wzcli8q.js +0 -1
  219. package/.next/standalone/.next/static/chunks/3otmypm6j_xfo.js +0 -6
  220. package/.next/standalone/.next/static/chunks/3yxro_r2_o9ad.js +0 -69
  221. package/.next/standalone/PROBE-FOLLOWUP.md +0 -186
  222. package/.next/standalone/app/actions/get-jev-config.ts +0 -424
  223. package/.next/standalone/app/actions/update-jev-config.ts +0 -420
  224. package/.next/standalone/app/components/jev-notices.tsx +0 -96
  225. package/.next/standalone/app/settings/jev-panel.tsx +0 -473
  226. package/src/hooks/effective-reviewers.ts +0 -79
  227. package/src/hooks/jev-activity.ts +0 -385
  228. package/src/hooks/jev-cli.ts +0 -1249
  229. package/src/hooks/policy-authority.ts +0 -333
  230. package/src/hooks/policy-reviewability.ts +0 -229
  231. package/src/hooks/semantic/combine.ts +0 -541
  232. package/src/hooks/semantic/compile.ts +0 -176
  233. package/src/hooks/semantic/decide.ts +0 -392
  234. package/src/hooks/semantic/envelope.ts +0 -1296
  235. package/src/hooks/semantic/evaluator.ts +0 -547
  236. package/src/hooks/semantic/facts.ts +0 -292
  237. package/src/hooks/semantic/intent.ts +0 -1190
  238. package/src/hooks/semantic/jev-client.ts +0 -643
  239. package/src/hooks/semantic/jev-config.ts +0 -594
  240. package/src/hooks/semantic/jev-review.ts +0 -374
  241. package/src/hooks/semantic/jev-stats.ts +0 -289
  242. package/src/hooks/semantic/jev-throttle.ts +0 -421
  243. package/src/hooks/semantic/pack-policies.ts +0 -251
  244. package/src/hooks/semantic/policies.ts +0 -596
  245. package/src/hooks/semantic/precondition-names.ts +0 -60
  246. package/src/hooks/semantic/preconditions.ts +0 -58
  247. package/src/hooks/semantic/redact.ts +0 -2910
  248. package/src/hooks/semantic/types.ts +0 -145
  249. package/src/hooks/semver-precedence.ts +0 -128
  250. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → PgeWCHmyVbjRznv2VO7KF}/_buildManifest.js +0 -0
  251. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → PgeWCHmyVbjRznv2VO7KF}/_clientMiddlewareManifest.js +0 -0
  252. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → PgeWCHmyVbjRznv2VO7KF}/_ssgManifest.js +0 -0
@@ -1,145 +0,0 @@
1
- /**
2
- * Types for the semantic (Jev-backed) evaluator.
3
- *
4
- * The regex engine answers "does this string match"; this one asks TypeSafe's
5
- * Jev a set of typed yes/no questions about the tool call and decides from the
6
- * probabilities. Everything here is plain data so the decision can be replayed
7
- * offline from a recorded response — see `decide.ts`.
8
- */
9
-
10
- /** Coarse class of a tool, derived deterministically from its canonical name. */
11
- export type ToolClass = "shell" | "write" | "read" | "network" | "other";
12
-
13
- /** A single yes/no question sent to Jev (the `noul` primitive). */
14
- export interface NoulQuestion {
15
- type: "noul";
16
- instructions: string;
17
- criteria?: { true: string; false: string };
18
- }
19
-
20
- export interface JevRequest {
21
- model: string;
22
- state: Record<string, unknown>;
23
- questions: Record<string, NoulQuestion>;
24
- }
25
-
26
- export interface JevNoulAnswer {
27
- type?: "noul";
28
- noul: number;
29
- }
30
-
31
- export interface JevResponse {
32
- model: string;
33
- answers: Record<string, JevNoulAnswer>;
34
- usage?: { input_tokens?: number; output_tokens?: number };
35
- /** Set when the provider did not report which Jev version answered (Cloudflare's unversioned alias). */
36
- modelUnverified?: boolean;
37
- }
38
-
39
- /** A yes/no probe. A policy fires only when every one of its probes holds. */
40
- export interface Probe {
41
- id: string;
42
- instructions: string;
43
- criteria?: { true: string; false: string };
44
- }
45
-
46
- export interface SemanticPolicy {
47
- /** Short slug; registered as `semantic/<name>` in reasons and logs. */
48
- name: string;
49
- /** Past-tense, human-readable description of what was caught. */
50
- title: string;
51
- /** Tool classes this policy is asked about. Unknown/MCP tools get every policy. */
52
- appliesTo: ReadonlyArray<ToolClass>;
53
- /**
54
- * `deny` policies block when the evidence is strong and instruct when it is
55
- * moderate; `instruct` policies only ever warn.
56
- */
57
- mode: "deny" | "instruct";
58
- /**
59
- * Whether the user's own explicit request may clear this policy. False for
60
- * the few things a prompt injection most wants to be approved for.
61
- */
62
- userCanOverride: boolean;
63
- /** Every probe must hold for the policy to fire (conjunction). */
64
- probes: ReadonlyArray<Probe>;
65
- /** If this holds, the policy does not fire — the documented exceptions. */
66
- exempt?: Probe;
67
- /** Deterministic precondition over the facts; when false nothing is asked. */
68
- precondition?: (facts: Facts) => boolean;
69
- /** Shown to the agent when the policy fires. */
70
- guidance: string;
71
- }
72
-
73
- export interface PathFact {
74
- asWritten: string;
75
- resolved: string;
76
- relation: "inside_project" | "project_root" | "outside_project_in_home" | "home_root" | "system" | "root";
77
- }
78
-
79
- /** Deterministic facts computed locally, so Jev never has to count or resolve. */
80
- export interface Facts {
81
- toolName: string;
82
- toolClass: ToolClass;
83
- /** False for tools no canonical map recognised — MCP tools, skills, etc. */
84
- toolIsKnown: boolean;
85
- cwd: string | null;
86
- projectRoot: string | null;
87
- currentGitBranch: string | null;
88
- paths: PathFact[];
89
- permissionMode: string | null;
90
- }
91
-
92
- export interface SemanticInput {
93
- eventType: string;
94
- toolName: string;
95
- toolInput: Record<string, unknown>;
96
- cwd?: string;
97
- permissionMode?: string;
98
- /** What the human typed recently, oldest first. Trusted channel only. */
99
- userSaid: string[];
100
- /**
101
- * The agent's last visible message before the human's latest one — what a
102
- * reply like "yes" or "do it" refers to. Agent-written, so it may only ever
103
- * explain a human reply; it is never consent on its own.
104
- */
105
- agentLastMessage?: string | null;
106
- }
107
-
108
- /**
109
- * How "did the human ask for this?" is put to Jev.
110
- *
111
- * - `v0`: one `user_asked` question per policy, phrased as the policy's harm,
112
- * plus a global `scope` question. Measured to clear a policy 6 times in
113
- * 1,332 cases.
114
- * - `v1`: three task-level questions asked once per call — is this a step
115
- * toward the human's task, did they ask for this exact operation, does it
116
- * reach beyond what they asked — judged only against the human's own words
117
- * with harness-written text removed.
118
- */
119
- export type IntentMode = "v0" | "v1";
120
-
121
- export interface PolicyOutcome {
122
- policy: string;
123
- mode: "deny" | "instruct";
124
- /** min over probe probabilities — one weak probe spoils the evidence. */
125
- evidence: number;
126
- exempt: number | null;
127
- userAsked: number | null;
128
- targetNamedByUser: boolean;
129
- /** Fired, and the request also addressed the reviewer — so it was blocked outright. */
130
- escalatedByInjection: boolean;
131
- verdict: "deny" | "instruct" | "overridden" | "none";
132
- /** v1 only: why an override applied, or that a deny was softened to instruct. */
133
- intent?: "op-requested" | "task-step" | "downgraded-task-step";
134
- }
135
-
136
- export interface SemanticVerdict {
137
- decision: "allow" | "deny" | "instruct";
138
- reason: string | null;
139
- outcomes: PolicyOutcome[];
140
- injectionSuspected: number | null;
141
- /** The `scope` answer: does the request stay within what the user asked? null when not asked. */
142
- scopeWithinRequest: number | null;
143
- /** v1 only: set when the call was flagged for reaching beyond the human's task. */
144
- beyondTask?: boolean;
145
- }
@@ -1,128 +0,0 @@
1
- /**
2
- * Semver PRECEDENCE — ordering two version strings — for the one question a
3
- * pack manifest asks: is the CLI about to run this pack at least the version
4
- * the pack says it needs?
5
- *
6
- * ## Why this is written out rather than reused
7
- *
8
- * Nothing in this repo orders two versions. `daemonVersionSkew()` compares them
9
- * for EQUALITY, which is the right test there — the CLI and the daemon ship
10
- * from one commit, so anything but identical is skew — and it yields no
11
- * ordering at all. There is no semver dependency either: this module runs on
12
- * the hook path, and the loader's rule is that nothing there may pull in a
13
- * package.
14
- *
15
- * ## Why the obvious implementation is wrong here
16
- *
17
- * Splitting on dots and comparing numbers gets the release triple right and the
18
- * PRERELEASE exactly backwards. This package's version is `1.0.7-beta.0`, and
19
- * the beta cut from that line is the first build that understands
20
- * `minCliVersion` at all — so it is the build a pack's minimum is aimed at. On
21
- * numbers alone `1.0.7-beta.0` satisfies a minimum of `1.0.7`, which reads the
22
- * beta as the newer build when it is the older one, and the pack installs on a
23
- * CLI that may be missing the feature the minimum exists to require.
24
- *
25
- * So precedence follows semver §11 for real:
26
- *
27
- * 1.0.6 < 1.0.7-beta.0 < 1.0.7-beta.1 < 1.0.7 < 1.0.8
28
- *
29
- * - the release triple is compared numerically, field by field;
30
- * - a version WITH a prerelease is lower than the same triple without one;
31
- * - prerelease identifiers are compared left to right, numeric ones
32
- * numerically and always below alphanumeric ones, and a longer identifier
33
- * list wins when every shared identifier is equal;
34
- * - build metadata (`+2026.09.24`) is ignored, because it carries no precedence.
35
- *
36
- * Anything this cannot order is reported as unorderable rather than guessed at.
37
- * A caller comparing versions to decide whether to REFUSE something needs to
38
- * know the difference between "older" and "I cannot tell".
39
- */
40
-
41
- /** A version decomposed far enough to be ordered. Build metadata is dropped. */
42
- export interface SemVer {
43
- major: number;
44
- minor: number;
45
- patch: number;
46
- /** Dot-separated prerelease identifiers, numeric ones as numbers. Empty for a release. */
47
- prerelease: ReadonlyArray<string | number>;
48
- }
49
-
50
- /**
51
- * Strict semver, and strict on purpose. `v1.0.0`, `1.0`, `01.2.3` and
52
- * `1.0.7-beta.0.` are all things people write and none of them has one
53
- * unambiguous ordering, so they are refused rather than normalised — a
54
- * `minCliVersion` nobody can order is a requirement nobody can check.
55
- */
56
- const SEMVER_RE =
57
- /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/;
58
-
59
- const NUMERIC_ID = /^(?:0|[1-9]\d*)$/;
60
-
61
- /** Decompose a version, or `null` when it is not one this can order. */
62
- export function parseSemver(value: unknown): SemVer | null {
63
- if (typeof value !== "string") return null;
64
- const m = SEMVER_RE.exec(value);
65
- if (!m) return null;
66
- return {
67
- major: Number(m[1]),
68
- minor: Number(m[2]),
69
- patch: Number(m[3]),
70
- prerelease: m[4] === undefined ? [] : m[4].split(".").map((id) => (NUMERIC_ID.test(id) ? Number(id) : id)),
71
- };
72
- }
73
-
74
- const cmp = (a: number, b: number): number => (a < b ? -1 : a > b ? 1 : 0);
75
-
76
- /**
77
- * Compare two prerelease identifier lists. An EMPTY list is a release, and a
78
- * release outranks every prerelease of the same triple — the rule the naive
79
- * implementation loses, and the one that decides this release's own case.
80
- */
81
- function comparePrerelease(a: ReadonlyArray<string | number>, b: ReadonlyArray<string | number>): number {
82
- if (a.length === 0 && b.length === 0) return 0;
83
- if (a.length === 0) return 1;
84
- if (b.length === 0) return -1;
85
- for (let i = 0; i < Math.min(a.length, b.length); i++) {
86
- const x = a[i];
87
- const y = b[i];
88
- if (x === y) continue;
89
- const xNum = typeof x === "number";
90
- const yNum = typeof y === "number";
91
- // "Numeric identifiers always have lower precedence than non-numeric
92
- // ones" (semver §11.4.3): `1.0.0-1` is below `1.0.0-alpha`, so an `rc.1`
93
- // line and a `1` line never interleave by accident.
94
- if (xNum !== yNum) return xNum ? -1 : 1;
95
- if (xNum && yNum) return cmp(x as number, y as number);
96
- return (x as string) < (y as string) ? -1 : 1;
97
- }
98
- // Every shared identifier is equal, so the longer list is the later build:
99
- // `1.0.0-beta` < `1.0.0-beta.1`.
100
- return cmp(a.length, b.length);
101
- }
102
-
103
- /** `-1`, `0` or `1` by semver precedence. */
104
- export function compareSemver(a: SemVer, b: SemVer): number {
105
- return cmp(a.major, b.major) || cmp(a.minor, b.minor) || cmp(a.patch, b.patch) || comparePrerelease(a.prerelease, b.prerelease);
106
- }
107
-
108
- /**
109
- * `-1` / `0` / `1` for two version STRINGS, or `null` when either one cannot be
110
- * ordered. Null is deliberately not 0: a caller that treats "unorderable" as
111
- * "equal" silently accepts the requirement it could not check.
112
- *
113
- * There is deliberately NO `meetsMinimum(current, minimum): boolean | null` here.
114
- * It existed, and it collapsed two situations that need opposite treatment into
115
- * one value: an ABSENT minimum (every pack published before today has none, so it
116
- * must satisfy) and a MALFORMED one. A call site reading `=== false` would then
117
- * ignore a typo'd requirement, and one reading `!== true` would refuse every
118
- * pre-existing pack — and on an `enforce` pack that means denying every tool call
119
- * the pack covers. Neither mistake shows up until a user hits it, so the decision
120
- * is encoded once, where the field lives: `checkPackMinCliVersion` in
121
- * `pack-manifest.ts`.
122
- */
123
- export function compareVersions(a: unknown, b: unknown): number | null {
124
- const left = parseSemver(a);
125
- const right = parseSemver(b);
126
- if (!left || !right) return null;
127
- return compareSemver(left, right);
128
- }