failproofai 1.0.7-beta.2 → 1.0.8-beta.0

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 (225) 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 +3 -3
  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.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  18. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/audit/run/route.js +5 -5
  23. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  31. package/.next/standalone/.next/server/app/audit/page.js +4 -4
  32. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/index.html +1 -1
  35. package/.next/standalone/.next/server/app/index.rsc +15 -15
  36. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  37. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  38. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  39. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  40. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  43. package/.next/standalone/.next/server/app/policies/page.js +6 -7
  44. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  47. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  51. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +2 -2
  52. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  55. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +18 -7
  58. package/.next/standalone/.next/server/app/settings/page.js +9 -7
  59. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/chunks/{[externals]__1j-zsg5._.js → [externals]__20kzpkf._.js} +1 -1
  62. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l3yhx4._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ttrwnd._.js +22 -0
  65. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +20 -20
  66. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  67. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  68. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +9 -9
  69. package/.next/standalone/.next/server/chunks/_1q5i8mb._.js +1 -1
  70. package/.next/standalone/.next/server/chunks/lib_16xa545._.js +3 -0
  71. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/src_hooks_1aveq0u._.js +5 -0
  73. package/.next/standalone/.next/server/chunks/src_hooks_1eem5a7._.js +3 -0
  74. package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +2 -2
  75. package/.next/standalone/.next/server/chunks/ssr/[externals]__0ohnuzs._.js +3 -0
  76. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +2 -2
  77. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +2 -2
  78. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qxnccm._.js → [root-of-the-server]__06pflha._.js} +2 -4
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +2 -2
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +2 -2
  82. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0soxz2z._.js → [root-of-the-server]__12e7nhs._.js} +2 -2
  83. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0l44ual._.js → [root-of-the-server]__14o3ek1._.js} +2 -2
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15578wp._.js +4 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19evfi8._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +4 -0
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +2 -2
  89. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +1 -1
  90. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  91. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/{_1v-jvrv._.js → _0o4xkpl._.js} +1 -1
  93. package/.next/standalone/.next/server/chunks/ssr/{_1mel6y1._.js → _1-7sqrb._.js} +2 -2
  94. package/.next/standalone/.next/server/chunks/ssr/_1gb0ifp._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +13 -13
  97. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0aiy-os._.js +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0-q0umm._.js +3 -0
  104. package/.next/standalone/.next/server/chunks/ssr/src_hooks_06kzv9d._.js +12 -0
  105. package/.next/standalone/.next/server/chunks/ssr/src_hooks_0g194sy._.js +3 -0
  106. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +12 -0
  107. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1kx9e0d._.js +3 -0
  108. package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo._.js +5 -0
  109. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589g._.js +1 -1
  110. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  111. package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me65._.js +1 -1
  112. package/.next/standalone/.next/server/chunks/ssr/src_hooks_semantic_pack-policies_ts_0gh_bu_._.js +3 -0
  113. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  114. package/.next/standalone/.next/server/pages/404.html +1 -1
  115. package/.next/standalone/.next/server/pages/500.html +1 -1
  116. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/server-reference-manifest.json +33 -22
  118. package/.next/standalone/.next/static/chunks/078gnymqoh3r4.js +1 -0
  119. package/.next/standalone/.next/static/chunks/{3brze37td_wnc.js → 0ahfwmbkpgfw4.js} +1 -1
  120. package/.next/standalone/.next/static/chunks/{043j99m8ykg__.css → 0bhidk90e-07f.css} +1 -1
  121. package/.next/standalone/.next/static/chunks/1bu2-nv59ed6i.js +1 -0
  122. package/.next/standalone/.next/static/chunks/{3ugmd_7dyn0id.js → 1v_tp3hm8wyhe.js} +1 -1
  123. package/.next/standalone/.next/static/chunks/2a405_e1o26ol.js +1 -0
  124. package/.next/standalone/.next/static/chunks/{3yxro_r2_o9ad.js → 2vo7qbdbvnc0o.js} +1 -1
  125. package/.next/standalone/.next/static/chunks/{0fqd7m_u81mi5.js → 2z7i-yg59w4pn.js} +1 -1
  126. package/.next/standalone/.next/static/chunks/36uhh9el_oz8e.js +1 -0
  127. package/.next/standalone/.next/static/chunks/{129ag2bw93bdh.js → 3bgot5v6f6s3c.js} +1 -1
  128. package/.next/standalone/.next/static/chunks/{3otmypm6j_xfo.js → 3o3f1ibfci0p7.js} +2 -2
  129. package/.next/standalone/SECURITY.md +53 -0
  130. package/.next/standalone/app/actions/get-jev-config.ts +194 -14
  131. package/.next/standalone/app/actions/update-jev-config.ts +160 -11
  132. package/.next/standalone/app/policies/hooks-client.tsx +5 -3
  133. package/.next/standalone/app/settings/jev-panel.tsx +169 -12
  134. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +22 -4
  135. package/.next/standalone/fp-cloud-cli/fp_cli/client.py +14 -1
  136. package/.next/standalone/fp-cloud-cli/fp_cli/commands/keys_cmds.py +17 -3
  137. package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +3 -0
  138. package/.next/standalone/fp-cloud-cli/fp_cli/permissions.py +22 -0
  139. package/.next/standalone/fp-cloud-cli/fp_cli/policy_check.py +169 -0
  140. package/.next/standalone/fp-cloud-cli/skill/references/commands.md +1 -1
  141. package/.next/standalone/fp-cloud-cli/tests/test_keys_queries.py +65 -0
  142. package/.next/standalone/fp-cloud-cli/tests/test_policy_check.py +61 -0
  143. package/.next/standalone/package.json +9 -9
  144. package/.next/standalone/sdk/python/CHANGELOG.md +7 -0
  145. package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -1
  146. package/.next/standalone/sdk/typescript/CHANGELOG.md +15 -1
  147. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +10 -30
  148. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +3 -0
  149. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +4 -16
  150. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +3 -0
  151. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +13 -132
  152. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +4 -0
  153. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +4 -142
  154. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +4 -0
  155. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +1396 -1016
  156. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +9 -0
  157. package/.next/standalone/sdk/typescript/scripts/release.mjs +30 -0
  158. package/.next/standalone/server.js +1 -1
  159. package/README.md +1 -0
  160. package/bin/failproofai.mjs +37 -6
  161. package/dist/cli.mjs +2861 -1145
  162. package/dist/worker.mjs +815 -197
  163. package/package.json +9 -9
  164. package/src/hooks/builtin-policies.ts +24 -6
  165. package/src/hooks/cloud-connection.ts +190 -1
  166. package/src/hooks/cloud-enrollment-cli.ts +56 -7
  167. package/src/hooks/cloud-introspect.ts +6 -0
  168. package/src/hooks/configure-wizard.ts +26 -6
  169. package/src/hooks/custom-hooks-loader.ts +58 -8
  170. package/src/hooks/effective-reviewers.ts +172 -8
  171. package/src/hooks/flush-cli.ts +35 -8
  172. package/src/hooks/fp-config.ts +266 -1
  173. package/src/hooks/fp-reset.ts +22 -4
  174. package/src/hooks/handler.ts +44 -7
  175. package/src/hooks/hook-activity-store.ts +13 -5
  176. package/src/hooks/jev-cli.ts +1009 -86
  177. package/src/hooks/jev-cloud-connection.ts +392 -0
  178. package/src/hooks/manager.ts +44 -6
  179. package/src/hooks/pack-cli.ts +175 -37
  180. package/src/hooks/pack-failclosed.ts +3 -0
  181. package/src/hooks/pack-manifest.ts +11 -1
  182. package/src/hooks/pack-store.ts +47 -10
  183. package/src/hooks/policy-authority.ts +73 -20
  184. package/src/hooks/policy-catalog.ts +10 -8
  185. package/src/hooks/policy-evaluator.ts +31 -8
  186. package/src/hooks/policy-registry.ts +3 -2
  187. package/src/hooks/policy-reviewability.ts +41 -12
  188. package/src/hooks/policy-types.ts +5 -3
  189. package/src/hooks/semantic/combine.ts +124 -84
  190. package/src/hooks/semantic/decide.ts +16 -0
  191. package/src/hooks/semantic/envelope.ts +18 -59
  192. package/src/hooks/semantic/evaluator.ts +11 -2
  193. package/src/hooks/semantic/facts.ts +7 -1
  194. package/src/hooks/semantic/intent.ts +8 -8
  195. package/src/hooks/semantic/jev-client.ts +540 -28
  196. package/src/hooks/semantic/jev-config.ts +586 -38
  197. package/src/hooks/semantic/jev-review.ts +26 -11
  198. package/src/hooks/semantic/jev-throttle.ts +8 -2
  199. package/src/hooks/semantic/pack-policies.ts +58 -15
  200. package/src/hooks/semantic/policies.ts +4 -3
  201. package/src/hooks/semantic/redact.ts +28 -1
  202. package/src/hooks/semantic/session-root.ts +116 -0
  203. package/src/hooks/semantic/types.ts +11 -0
  204. package/src/hooks/tui.ts +4 -0
  205. package/src/hooks/worker-server.ts +2 -1
  206. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cuho4x._.js +0 -3
  207. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bf34x4._.js +0 -22
  208. package/.next/standalone/.next/server/chunks/src_hooks_01frwmb._.js +0 -5
  209. package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +0 -3
  210. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +0 -4
  211. package/.next/standalone/.next/server/chunks/ssr/_1feuvhb._.js +0 -5
  212. package/.next/standalone/.next/server/chunks/ssr/_1w_5l7t._.js +0 -3
  213. package/.next/standalone/.next/server/chunks/ssr/src_hooks_095a_79._.js +0 -5
  214. package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +0 -3
  215. package/.next/standalone/.next/server/chunks/ssr/src_hooks_18k8rl0._.js +0 -12
  216. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +0 -3
  217. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +0 -3
  218. package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +0 -3
  219. package/.next/standalone/.next/static/chunks/1qd741hzlmjbo.js +0 -1
  220. package/.next/standalone/.next/static/chunks/2_pltstd8-xgs.js +0 -1
  221. package/.next/standalone/.next/static/chunks/2c8j9l6j_b1ci.js +0 -1
  222. package/.next/standalone/.next/static/chunks/3-k569wzcli8q.js +0 -1
  223. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → O_b5R1axf5cb4NxIXq2kS}/_buildManifest.js +0 -0
  224. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → O_b5R1axf5cb4NxIXq2kS}/_clientMiddlewareManifest.js +0 -0
  225. /package/.next/standalone/.next/static/{gbEOjBgZAxF2UIUwZVHNu → O_b5R1axf5cb4NxIXq2kS}/_ssgManifest.js +0 -0
@@ -34,6 +34,35 @@ def test_policy_permissions_are_assignable_and_in_presets():
34
34
  assert "policies:read" in PRESETS["standard"]
35
35
  assert "policies:pull" in PRESETS["admin"]
36
36
 
37
+
38
+ def test_jev_permission_is_assignable_and_in_the_admin_preset_only():
39
+ from fp_cli.permissions import (
40
+ ALL_PERMISSIONS,
41
+ ASSIGNABLE_PERMISSIONS,
42
+ KEY_ASSIGNABLE_PERMISSIONS,
43
+ PRESETS,
44
+ )
45
+
46
+ assert "jev:evaluate" in ALL_PERMISSIONS
47
+ # In the server's declared order: after usage:read, and orgs:admin stays last.
48
+ assert ALL_PERMISSIONS.index("jev:evaluate") == ALL_PERMISSIONS.index("usage:read") + 1
49
+ assert ALL_PERMISSIONS[-1] == "orgs:admin"
50
+ # A machine key carries it, so it is grantable to a key as well as a member.
51
+ assert "jev:evaluate" in ASSIGNABLE_PERMISSIONS
52
+ assert "jev:evaluate" in KEY_ASSIGNABLE_PERMISSIONS
53
+ # The server's built-in admin set carries it; nothing narrower does.
54
+ assert "jev:evaluate" in PRESETS["admin"]
55
+ assert "jev:evaluate" not in PRESETS["read-only"]
56
+ assert "jev:evaluate" not in PRESETS["standard"]
57
+ # And the admin preset can be granted to a key: it carries both permissions
58
+ # the server requires beside jev:evaluate.
59
+ assert {"events:add", "policies:pull"} <= set(PRESETS["admin"])
60
+
61
+
62
+ def test_parse_permissions_accepts_jev_evaluate():
63
+ assert _parse_permissions(["events:add policies:pull jev:evaluate"]) == [
64
+ "events:add", "policies:pull", "jev:evaluate"]
65
+
37
66
  BASE = "http://dash.test"
38
67
 
39
68
 
@@ -111,6 +140,42 @@ def test_keys_create_rejects_malformed_token(logged_in, runner):
111
140
  assert runner.invoke(app, ["keys", "create", "k", "--add", "events:"]).exit_code == 2
112
141
 
113
142
 
143
+ @respx.mock
144
+ def test_keys_create_machine_preset(logged_in, runner):
145
+ # The dashboard's key-only `machine` preset: collect, pull policy, Jev.
146
+ respx.get(f"{BASE}/api/keys").mock(return_value=httpx.Response(200, json=[]))
147
+ respx.get(f"{BASE}/api/permission-sets").mock(return_value=httpx.Response(200, json=[]))
148
+ route = respx.post(f"{BASE}/api/keys").mock(
149
+ return_value=httpx.Response(201, json={"id": "k9", "name": "m", "permissions": [], "created_at": "t"})
150
+ )
151
+ result = runner.invoke(app, ["--json", "keys", "create", "m", "--permission-set", "machine"])
152
+ assert result.exit_code == 0, result.output
153
+ assert json.loads(route.calls.last.request.content)["permissions"] == ["events:add", "jev:evaluate", "policies:pull"]
154
+
155
+
156
+ @respx.mock
157
+ def test_keys_create_refuses_jev_without_its_prerequisites(logged_in, runner):
158
+ # The server's 422 (JEV_REQUIRES), said before anything is sent.
159
+ respx.get(f"{BASE}/api/keys").mock(return_value=httpx.Response(200, json=[]))
160
+ route = respx.post(f"{BASE}/api/keys").mock(return_value=httpx.Response(201, json={}))
161
+ result = runner.invoke(app, ["--json", "keys", "create", "k", "--add", "jev:evaluate,events:add"])
162
+ assert result.exit_code == 2, result.output
163
+ assert "missing: policies:pull" in json.loads(result.stdout)["error"]
164
+ assert not route.called
165
+
166
+
167
+ @respx.mock
168
+ def test_keys_update_refuses_dropping_a_jev_prerequisite(logged_in, runner):
169
+ respx.get(f"{BASE}/api/keys").mock(return_value=httpx.Response(200, json=[
170
+ {"id": "k1", "name": "m", "permissions": ["events:add", "jev:evaluate", "policies:pull"],
171
+ "created_at": "t", "revoked_at": None}]))
172
+ route = respx.patch(f"{BASE}/api/keys/k1").mock(return_value=httpx.Response(200, json={}))
173
+ result = runner.invoke(app, ["--json", "keys", "update", "m", "--remove", "events:add", "--yes"])
174
+ assert result.exit_code == 2, result.output
175
+ assert "missing: events:add" in json.loads(result.stdout)["error"]
176
+ assert not route.called
177
+
178
+
114
179
  @respx.mock
115
180
  def test_keys_create_name_collision(logged_in, runner):
116
181
  respx.get(f"{BASE}/api/keys").mock(return_value=httpx.Response(200, json=[
@@ -189,3 +189,64 @@ def test_parsing_and_executing_have_separate_budgets():
189
189
 
190
190
  assert policy_check._TIMEOUT_SECS == 5
191
191
  assert policy_check._SYNTAX_TIMEOUT_SECS > policy_check._TIMEOUT_SECS
192
+
193
+
194
+ # ── Jev fields a cloud policy never reads ────────────────────────────────────
195
+ #
196
+ # `semanticPolicies.add` is read only from a pack built by `failproofai publish`,
197
+ # and a cloud policy's authority comes from its deployment record, which never
198
+ # sets it — so both publish as a version that reads Jev-aware and is not. The
199
+ # dashboard refuses them (agenteye `dashboard/lib/policies/policyMeta.ts`,
200
+ # `cloudPublishProblem`); the server never reads the source. These cases are the
201
+ # dashboard's own, so the two surfaces agree on what counts.
202
+
203
+ JEV_BASE = '''import { customPolicies, allow } from "failproofai";
204
+
205
+ customPolicies.add({
206
+ name: "block-wrong-jira-project",
207
+ description: "Deny Jira writes outside the configured project",
208
+ match: { events: ["PreToolUse"] },
209
+ fn: async (ctx) => allow(),
210
+ });
211
+ '''
212
+ _SECOND = JEV_BASE.split("\n", 1)[1].replace("match:", 'authority: "reviewable",\n match:')
213
+
214
+
215
+ @pytest.mark.parametrize("src,needle", [
216
+ (JEV_BASE, None),
217
+ (JEV_BASE + '\nsemanticPolicies.add({ name: "db-migration-on-production" });\n', "failproofai pack"),
218
+ (JEV_BASE.replace("match:", 'authority: "reviewable", reviewedBy: ["destructive-deletion"],\n match:'),
219
+ "always hard"),
220
+ ('// semanticPolicies.add({ name: "later" })\n' + JEV_BASE, None),
221
+ ('/* customPolicies.add({ authority: "reviewable" }) */\n' + JEV_BASE, None),
222
+ ('const s = "semanticPolicies.add(";\n' + JEV_BASE, None),
223
+ (JEV_BASE.replace("allow()", 'allow("authority: reviewable")'), None),
224
+ (JEV_BASE + '\nsemanticPolicies\n .add ({ name: "db-migration-on-production" });\n', "failproofai pack"),
225
+ (JEV_BASE + "\n" + _SECOND, "always hard"),
226
+ ], ids=["plain", "semantic", "reviewable", "commented-semantic", "commented-reviewable",
227
+ "string-literal", "nested-text", "split-spelling", "later-registration"])
228
+ def test_jev_fields_are_refused_the_way_the_dashboard_refuses_them(src, needle):
229
+ from fp_cli.policy_check import cloud_publish_problem
230
+
231
+ problem = cloud_publish_problem(src)
232
+ if needle is None:
233
+ assert problem is None
234
+ else:
235
+ assert problem and needle in problem
236
+
237
+
238
+ def test_publish_refuses_jev_fields_before_anything_is_sent(monkeypatch):
239
+ """Both `policies publish` and `policies compose --publish` route through
240
+ `client.publish_policy`, so the refusal lives there — and must fire before
241
+ the POST, whatever `--no-verify` said about the syntax check."""
242
+ from fp_cli import client
243
+ from fp_cli.errors import ApiError
244
+
245
+ def _no_post(*a, **kw):
246
+ raise AssertionError("a refused source reached the server")
247
+
248
+ monkeypatch.setattr(client, "_post_json", _no_post)
249
+ src = JEV_BASE + '\nsemanticPolicies.add({ name: "db-migration-on-production" });\n'
250
+ with pytest.raises(ApiError) as exc:
251
+ client.publish_policy(None, "p", src)
252
+ assert "failproofai publish" in str(exc.value) + (exc.value.hint or "")
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "failproofai",
3
- "version": "1.0.7-beta.2",
3
+ "version": "1.0.8-beta.0",
4
4
  "description": "Observability and enforcement for AI agent harnesses. 40 built-in policies hooked into 12 of them — Claude Code, Codex, Cursor, Hermes, OpenClaw and more — blocking the tool call before it runs. Local dashboard included, no account needed.",
5
5
  "bin": {
6
6
  "failproofai": "./dist/cli.mjs",
@@ -122,15 +122,15 @@
122
122
  "browserslist": "4.28.8"
123
123
  },
124
124
  "optionalDependencies": {
125
- "@failproofai/failproofaid-linux-x64": "1.0.7-beta.2",
126
- "@failproofai/failproofaid-linux-arm64": "1.0.7-beta.2",
127
- "@failproofai/failproofaid-darwin-x64": "1.0.7-beta.2",
128
- "@failproofai/failproofaid-darwin-arm64": "1.0.7-beta.2"
125
+ "@failproofai/failproofaid-linux-x64": "1.0.8-beta.0",
126
+ "@failproofai/failproofaid-linux-arm64": "1.0.8-beta.0",
127
+ "@failproofai/failproofaid-darwin-x64": "1.0.8-beta.0",
128
+ "@failproofai/failproofaid-darwin-arm64": "1.0.8-beta.0"
129
129
  },
130
130
  "failproofaidBinaries": {
131
- "linux-x64": "5362ab6a4cfb23d1eee598aac67aedd9e43351e62724ee1c6b40c4fc8021c08f",
132
- "linux-arm64": "f14a2548b41e14ad32b7fdd03a27ffe7160da1046e422e1f651099371b0d27e5",
133
- "darwin-x64": "14189cade04f17cf5278bd8061a5ec0c2a2381aa21944ae0d05e8c35b98c2816",
134
- "darwin-arm64": "4ba9f5c321894d953407efa3404f0deec07dccfd7db7bc2511bb35226816b583"
131
+ "linux-x64": "35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb",
132
+ "linux-arm64": "a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d",
133
+ "darwin-x64": "b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8",
134
+ "darwin-arm64": "fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"
135
135
  }
136
136
  }
@@ -9,6 +9,13 @@ in `failproofai_sdk/_version.py` becomes that release's GitHub Release body. A
9
9
  release whose section is missing or empty is refused before anything is built —
10
10
  see `scripts/changelog-section.py`.
11
11
 
12
+ ## 0.0.1b6 — 2026-09-26
13
+
14
+ Open for the next release. `0.0.1b5` published on 2026-09-26 and the `bump` job
15
+ moved the version here automatically; nothing has landed against `0.0.1b6` yet.
16
+ Add entries as changes merge — this section becomes the GitHub Release body when
17
+ it ships.
18
+
12
19
  ## 0.0.1b5 — 2026-09-22
13
20
 
14
21
  Open for the next release. `0.0.1b4` published on 2026-09-22 and the `bump` job
@@ -1 +1 @@
1
- __version__ = "0.0.1b5"
1
+ __version__ = "0.0.1b6"
@@ -12,7 +12,21 @@ section is missing or empty is refused before anything is built.
12
12
 
13
13
  ### Fixes
14
14
 
15
- - _Nothing yet._
15
+ - **The integration fixtures stop carrying 32 open security advisories.** Nothing
16
+ the published package ships changed — every fixture under `integration/fixtures/`
17
+ is `"private": true` and exists only to run the adapters against real framework
18
+ releases — but their committed lockfiles are read by GitHub's dependency graph,
19
+ and the old majors those fixtures deliberately pin (`ai@4.3.19`,
20
+ `@langchain/core@0.3.80`, `@mastra/core@0.24.9`) pin *their* transitive deps
21
+ exactly, so nothing moved in range. Five fixtures now carry a minimal `overrides`
22
+ entry — `undici`, `langsmith`, `uuid`, `jsondiffpatch` and five OpenTelemetry
23
+ packages — clearing 32 of them with every framework pin, and
24
+ `langchain-dup-core`'s two-copies-of-`@langchain/core` shape, unchanged.
25
+ Four alerts remain, from two low-severity advisories: one against `ai@4.3.19`
26
+ (GHSA-rwvc-j5jr-mgvh) and one against the `@ai-sdk/provider-utils@2.2.8` that
27
+ ships inside it (GHSA-866g-f22w-33x8). Both are fixed only in the major these
28
+ fixtures exist to stay below, so `SECURITY.md` records them and the rule for
29
+ the next one. (`nextjs`'s `postcss` is handled in #836.) (#837)
16
30
 
17
31
  ## 0.0.1-beta.0 — 2026-09-23
18
32
 
@@ -83,6 +83,12 @@
83
83
  "zod": "^3.23.8"
84
84
  }
85
85
  },
86
+ "node_modules/@dmsnell/diff-match-patch": {
87
+ "version": "1.1.0",
88
+ "resolved": "https://registry.npmjs.org/@dmsnell/diff-match-patch/-/diff-match-patch-1.1.0.tgz",
89
+ "integrity": "sha512-yejLPmM5pjsGvxS9gXablUSbInW7H976c/FJ4iQxWIm7/38xBySRemTPDe34lhg1gVLbJntX0+sH0jYfU+PN9A==",
90
+ "license": "Apache-2.0"
91
+ },
86
92
  "node_modules/@opentelemetry/api": {
87
93
  "version": "1.9.0",
88
94
  "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
@@ -92,12 +98,6 @@
92
98
  "node": ">=8.0.0"
93
99
  }
94
100
  },
95
- "node_modules/@types/diff-match-patch": {
96
- "version": "1.0.36",
97
- "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz",
98
- "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==",
99
- "license": "MIT"
100
- },
101
101
  "node_modules/@types/node": {
102
102
  "version": "22.20.4",
103
103
  "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.4.tgz",
@@ -134,18 +134,6 @@
134
134
  }
135
135
  }
136
136
  },
137
- "node_modules/chalk": {
138
- "version": "5.6.2",
139
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
140
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
141
- "license": "MIT",
142
- "engines": {
143
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
144
- },
145
- "funding": {
146
- "url": "https://github.com/chalk/chalk?sponsor=1"
147
- }
148
- },
149
137
  "node_modules/dequal": {
150
138
  "version": "2.0.3",
151
139
  "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -155,12 +143,6 @@
155
143
  "node": ">=6"
156
144
  }
157
145
  },
158
- "node_modules/diff-match-patch": {
159
- "version": "1.0.5",
160
- "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
161
- "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
162
- "license": "Apache-2.0"
163
- },
164
146
  "node_modules/json-schema": {
165
147
  "version": "0.4.0",
166
148
  "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -168,14 +150,12 @@
168
150
  "license": "(AFL-2.1 OR BSD-3-Clause)"
169
151
  },
170
152
  "node_modules/jsondiffpatch": {
171
- "version": "0.6.0",
172
- "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz",
173
- "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==",
153
+ "version": "0.7.6",
154
+ "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.7.6.tgz",
155
+ "integrity": "sha512-zE9+AXFq+MkTolDor2Cw1nJzLC0aleqPkYf52Kb4Kn4mJcka/gFHpGI2JBVEJCfWOvBl0OoxZS+wuLdislQcqg==",
174
156
  "license": "MIT",
175
157
  "dependencies": {
176
- "@types/diff-match-patch": "^1.0.36",
177
- "chalk": "^5.3.0",
178
- "diff-match-patch": "^1.0.5"
158
+ "@dmsnell/diff-match-patch": "^1.1.0"
179
159
  },
180
160
  "bin": {
181
161
  "jsondiffpatch": "bin/jsondiffpatch.js"
@@ -9,5 +9,8 @@
9
9
  },
10
10
  "devDependencies": {
11
11
  "@types/node": "22.20.4"
12
+ },
13
+ "overrides": {
14
+ "jsondiffpatch": "0.7.6"
12
15
  }
13
16
  }
@@ -60,15 +60,6 @@
60
60
  "zod": "^3.25.76 || ^4.1.8"
61
61
  }
62
62
  },
63
- "node_modules/@fastify/busboy": {
64
- "version": "2.1.1",
65
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
66
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
67
- "license": "MIT",
68
- "engines": {
69
- "node": ">=14"
70
- }
71
- },
72
63
  "node_modules/@opentelemetry/api": {
73
64
  "version": "1.9.0",
74
65
  "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
@@ -137,15 +128,12 @@
137
128
  "license": "(AFL-2.1 OR BSD-3-Clause)"
138
129
  },
139
130
  "node_modules/undici": {
140
- "version": "5.29.0",
141
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
142
- "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
131
+ "version": "7.29.0",
132
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz",
133
+ "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==",
143
134
  "license": "MIT",
144
- "dependencies": {
145
- "@fastify/busboy": "^2.0.0"
146
- },
147
135
  "engines": {
148
- "node": ">=14.0"
136
+ "node": ">=20.18.1"
149
137
  }
150
138
  },
151
139
  "node_modules/undici-types": {
@@ -9,5 +9,8 @@
9
9
  },
10
10
  "devDependencies": {
11
11
  "@types/node": "22.20.4"
12
+ },
13
+ "overrides": {
14
+ "undici": "7.29.0"
12
15
  }
13
16
  }
@@ -111,20 +111,6 @@
111
111
  }
112
112
  }
113
113
  },
114
- "node_modules/@langchain/langgraph-sdk/node_modules/uuid": {
115
- "version": "9.0.1",
116
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
117
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
118
- "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
119
- "funding": [
120
- "https://github.com/sponsors/broofa",
121
- "https://github.com/sponsors/ctavan"
122
- ],
123
- "license": "MIT",
124
- "bin": {
125
- "uuid": "dist/bin/uuid"
126
- }
127
- },
128
114
  "node_modules/@types/json-schema": {
129
115
  "version": "7.0.15",
130
116
  "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -147,12 +133,6 @@
147
133
  "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
148
134
  "license": "MIT"
149
135
  },
150
- "node_modules/@types/uuid": {
151
- "version": "10.0.0",
152
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
153
- "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
154
- "license": "MIT"
155
- },
156
136
  "node_modules/ansi-styles": {
157
137
  "version": "5.2.0",
158
138
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
@@ -197,64 +177,6 @@
197
177
  "url": "https://github.com/sponsors/sindresorhus"
198
178
  }
199
179
  },
200
- "node_modules/chalk": {
201
- "version": "4.1.2",
202
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
203
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
204
- "license": "MIT",
205
- "dependencies": {
206
- "ansi-styles": "^4.1.0",
207
- "supports-color": "^7.1.0"
208
- },
209
- "engines": {
210
- "node": ">=10"
211
- },
212
- "funding": {
213
- "url": "https://github.com/chalk/chalk?sponsor=1"
214
- }
215
- },
216
- "node_modules/chalk/node_modules/ansi-styles": {
217
- "version": "4.3.0",
218
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
219
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
220
- "license": "MIT",
221
- "dependencies": {
222
- "color-convert": "^2.0.1"
223
- },
224
- "engines": {
225
- "node": ">=8"
226
- },
227
- "funding": {
228
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
229
- }
230
- },
231
- "node_modules/color-convert": {
232
- "version": "2.0.1",
233
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
234
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
235
- "license": "MIT",
236
- "dependencies": {
237
- "color-name": "~1.1.4"
238
- },
239
- "engines": {
240
- "node": ">=7.0.0"
241
- }
242
- },
243
- "node_modules/color-name": {
244
- "version": "1.1.4",
245
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
246
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
247
- "license": "MIT"
248
- },
249
- "node_modules/console-table-printer": {
250
- "version": "2.16.1",
251
- "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.16.1.tgz",
252
- "integrity": "sha512-Sc9FRJ4O9xKGNrvulNdPfK5SyBcZ6lcaRnDE4AQ/uw6IDtjHhsqyzzqcnMikjyGaiOOF2tNOKoBhbVjRvFy9Lw==",
253
- "license": "MIT",
254
- "dependencies": {
255
- "simple-wcswidth": "^1.1.2"
256
- }
257
- },
258
180
  "node_modules/decamelize": {
259
181
  "version": "1.2.0",
260
182
  "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -270,15 +192,6 @@
270
192
  "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
271
193
  "license": "MIT"
272
194
  },
273
- "node_modules/has-flag": {
274
- "version": "4.0.0",
275
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
276
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
277
- "license": "MIT",
278
- "engines": {
279
- "node": ">=8"
280
- }
281
- },
282
195
  "node_modules/js-tiktoken": {
283
196
  "version": "1.0.21",
284
197
  "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz",
@@ -289,23 +202,19 @@
289
202
  }
290
203
  },
291
204
  "node_modules/langsmith": {
292
- "version": "0.3.87",
293
- "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.87.tgz",
294
- "integrity": "sha512-XXR1+9INH8YX96FKWc5tie0QixWz6tOqAsAKfcJyPkE0xPep+NDz0IQLR32q4bn10QK3LqD2HN6T3n6z1YLW7Q==",
205
+ "version": "0.10.5",
206
+ "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.10.5.tgz",
207
+ "integrity": "sha512-VUh6LQYGb+wjmMz5Ulazqx1rUHLbWi2XZvVkSHfxDjz6V7u9TJOB6jW5CC84xcpffu7Jr1MZpBbEz3gg972HbA==",
295
208
  "license": "MIT",
296
209
  "dependencies": {
297
- "@types/uuid": "^10.0.0",
298
- "chalk": "^4.1.2",
299
- "console-table-printer": "^2.12.1",
300
- "p-queue": "^6.6.2",
301
- "semver": "^7.6.3",
302
- "uuid": "^10.0.0"
210
+ "p-queue": "6.6.2"
303
211
  },
304
212
  "peerDependencies": {
305
213
  "@opentelemetry/api": "*",
306
214
  "@opentelemetry/exporter-trace-otlp-proto": "*",
307
215
  "@opentelemetry/sdk-trace-base": "*",
308
- "openai": "*"
216
+ "openai": "*",
217
+ "ws": ">=7"
309
218
  },
310
219
  "peerDependenciesMeta": {
311
220
  "@opentelemetry/api": {
@@ -319,6 +228,9 @@
319
228
  },
320
229
  "openai": {
321
230
  "optional": true
231
+ },
232
+ "ws": {
233
+ "optional": true
322
234
  }
323
235
  }
324
236
  },
@@ -390,36 +302,6 @@
390
302
  "node": ">= 4"
391
303
  }
392
304
  },
393
- "node_modules/semver": {
394
- "version": "7.8.5",
395
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
396
- "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
397
- "license": "ISC",
398
- "bin": {
399
- "semver": "bin/semver.js"
400
- },
401
- "engines": {
402
- "node": ">=10"
403
- }
404
- },
405
- "node_modules/simple-wcswidth": {
406
- "version": "1.1.2",
407
- "resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz",
408
- "integrity": "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==",
409
- "license": "MIT"
410
- },
411
- "node_modules/supports-color": {
412
- "version": "7.2.0",
413
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
414
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
415
- "license": "MIT",
416
- "dependencies": {
417
- "has-flag": "^4.0.0"
418
- },
419
- "engines": {
420
- "node": ">=8"
421
- }
422
- },
423
305
  "node_modules/undici-types": {
424
306
  "version": "6.21.0",
425
307
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
@@ -428,17 +310,16 @@
428
310
  "license": "MIT"
429
311
  },
430
312
  "node_modules/uuid": {
431
- "version": "10.0.0",
432
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
433
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
434
- "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
313
+ "version": "11.1.1",
314
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz",
315
+ "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==",
435
316
  "funding": [
436
317
  "https://github.com/sponsors/broofa",
437
318
  "https://github.com/sponsors/ctavan"
438
319
  ],
439
320
  "license": "MIT",
440
321
  "bin": {
441
- "uuid": "dist/bin/uuid"
322
+ "uuid": "dist/esm/bin/uuid"
442
323
  }
443
324
  },
444
325
  "node_modules/zod": {
@@ -11,5 +11,9 @@
11
11
  },
12
12
  "devDependencies": {
13
13
  "@types/node": "22.20.4"
14
+ },
15
+ "overrides": {
16
+ "langsmith": "0.10.5",
17
+ "uuid": "11.1.1"
14
18
  }
15
19
  }