failproofai 1.0.8 → 1.0.9-beta.1

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 (191) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +5 -5
  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/build-manifest.json +2 -2
  6. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  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/build-manifest.json +2 -2
  15. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  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.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/audit/page/build-manifest.json +2 -2
  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.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/index.html +1 -1
  36. package/.next/standalone/.next/server/app/index.rsc +15 -15
  37. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  38. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  39. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/page/build-manifest.json +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.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
  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 +4 -4
  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/build-manifest.json +2 -2
  50. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  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/build-manifest.json +2 -2
  54. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  55. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  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/build-manifest.json +2 -2
  59. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  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/build-manifest.json +2 -2
  63. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  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/[root-of-the-server]__0o07qi9._.js +1 -1
  67. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +20 -20
  68. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  69. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  70. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +2 -2
  71. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +2 -2
  72. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +2 -2
  73. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  74. package/.next/standalone/.next/server/chunks/src_hooks_1aveq0u._.js +1 -1
  75. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03m2iw6._.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]__0n0xg95._.js +2 -2
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +2 -2
  80. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__12e7nhs._.js → [root-of-the-server]__1-bm5zf._.js} +1 -1
  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]__15578wp._.js +2 -2
  83. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m_svbe._.js +2 -2
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +2 -2
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +2 -2
  86. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +1 -1
  87. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  88. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/_11ilmst._.js +23 -0
  90. package/.next/standalone/.next/server/chunks/ssr/_1gb0ifp._.js +3 -3
  91. package/.next/standalone/.next/server/chunks/ssr/{_0-vcssj._.js → _1jatlmf._.js} +1 -1
  92. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  93. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +3 -3
  94. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  97. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +1 -1
  98. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/src_hooks_effective-reviewers_ts_1h4wtvo._.js +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/src_hooks_semantic_pack-policies_ts_0gh_bu_._.js +1 -1
  102. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  103. package/.next/standalone/.next/server/pages/404.html +1 -1
  104. package/.next/standalone/.next/server/pages/500.html +1 -1
  105. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
  107. package/.next/standalone/.next/static/chunks/{06jxjnw8bfczc.js → 0542cuk_va8g1.js} +1 -1
  108. package/.next/standalone/.next/static/chunks/{0wbjy0zo-m7is.js → 08ckontevw-0w.js} +1 -1
  109. package/.next/standalone/.next/static/chunks/0pefjgvu4x-sx.js +1 -0
  110. package/.next/standalone/.next/static/chunks/{21uv-uusw329x.js → 1-d48e9k-7e1a.js} +1 -1
  111. package/.next/standalone/.next/static/chunks/{0m-9d6yn9hx4j.js → 1r74hmr1wm_sd.js} +1 -1
  112. package/.next/standalone/.next/static/chunks/1uec0n0lcx5h1.js +1 -0
  113. package/.next/standalone/.next/static/chunks/21-pqc3-l9ak2.js +6 -0
  114. package/.next/standalone/.next/static/chunks/21qlo00jis4w-.js +1 -0
  115. package/.next/standalone/.next/static/chunks/2n00c3zqyloy9.js +1 -0
  116. package/.next/standalone/.next/static/chunks/{0bhidk90e-07f.css → 3_e_wg5_oay87.css} +1 -1
  117. package/.next/standalone/.next/static/chunks/{3c3qbmosdjl6w.js → 3tv107_for_n7.js} +1 -1
  118. package/.next/standalone/.next/static/chunks/{2qdpj67x6ifk_.js → 3vp54x0dyrrm6.js} +1 -1
  119. package/.next/standalone/.next/static/chunks/{turbopack-38nzuvp95_2rv.js → turbopack-11dn2pegmg9_9.js} +1 -1
  120. package/.next/standalone/app/actions/get-jev-config.ts +2 -2
  121. package/.next/standalone/app/actions/update-jev-config.ts +12 -9
  122. package/.next/standalone/app/components/jev-notices.tsx +10 -10
  123. package/.next/standalone/app/settings/jev-panel.tsx +11 -11
  124. package/.next/standalone/fp-cloud-cli/CHANGELOG.md +2 -0
  125. package/.next/standalone/fp-cloud-cli/fp_cli/output.py +26 -0
  126. package/.next/standalone/fp-cloud-cli/tests/test_output.py +27 -0
  127. package/.next/standalone/fp-cloud-cli/uv.lock +3 -3
  128. package/.next/standalone/hermes-plugin/README.md +18 -8
  129. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  130. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  131. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  132. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  133. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  134. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  135. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  136. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  137. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  138. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  139. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  140. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  141. package/.next/standalone/node_modules/next/package.json +10 -10
  142. package/.next/standalone/package.json +12 -12
  143. package/.next/standalone/sdk/python/uv.lock +18 -18
  144. package/.next/standalone/server.js +1 -1
  145. package/bin/failproofai.mjs +33 -7
  146. package/dist/cli.mjs +1385 -1158
  147. package/dist/worker.mjs +59 -375
  148. package/hermes-plugin/README.md +18 -8
  149. package/package.json +12 -12
  150. package/scripts/build-policy-pack.mjs +6 -9
  151. package/src/hooks/cloud-connection.ts +12 -6
  152. package/src/hooks/custom-hooks-loader.ts +1 -1
  153. package/src/hooks/effective-reviewers.ts +50 -43
  154. package/src/hooks/handler.ts +25 -16
  155. package/src/hooks/hermes-update.ts +74 -0
  156. package/src/hooks/hook-activity-store.ts +3 -3
  157. package/src/hooks/integrations.ts +472 -68
  158. package/src/hooks/jev-activity.ts +8 -3
  159. package/src/hooks/jev-cli.ts +17 -17
  160. package/src/hooks/jev-cloud-connection.ts +4 -4
  161. package/src/hooks/manager.ts +3 -2
  162. package/src/hooks/pack-cli.ts +24 -23
  163. package/src/hooks/pack-manifest.ts +25 -2
  164. package/src/hooks/pack-store.ts +2 -2
  165. package/src/hooks/policy-authority.ts +51 -32
  166. package/src/hooks/policy-evaluator.ts +5 -5
  167. package/src/hooks/policy-registry.ts +5 -7
  168. package/src/hooks/policy-reviewability.ts +30 -12
  169. package/src/hooks/policy-types.ts +4 -4
  170. package/src/hooks/safe-config-write.ts +119 -0
  171. package/src/hooks/semantic/combine.ts +13 -13
  172. package/src/hooks/semantic/evaluator.ts +5 -5
  173. package/src/hooks/semantic/jev-client.ts +1 -1
  174. package/src/hooks/semantic/jev-config.ts +21 -12
  175. package/src/hooks/semantic/jev-review.ts +3 -3
  176. package/src/hooks/semantic/jev-stats.ts +17 -17
  177. package/src/hooks/semantic/pack-policies.ts +48 -48
  178. package/src/hooks/semantic/policies.ts +13 -425
  179. package/src/hooks/semantic/precondition-names.ts +1 -1
  180. package/src/hooks/semantic/preconditions.ts +1 -1
  181. package/src/hooks/semantic/types.ts +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13t1zkw._.js +0 -3
  183. package/.next/standalone/.next/server/chunks/ssr/_13kfn90._.js +0 -23
  184. package/.next/standalone/.next/static/chunks/06dnzbolj00mc.js +0 -6
  185. package/.next/standalone/.next/static/chunks/16f3fa-lx38hk.js +0 -1
  186. package/.next/standalone/.next/static/chunks/2g2tki08kdhie.js +0 -1
  187. package/.next/standalone/.next/static/chunks/3-nbtkhg9y-1j.js +0 -1
  188. package/.next/standalone/.next/static/chunks/355km0ihuqo1p.js +0 -1
  189. /package/.next/standalone/.next/static/{5yKM8NoTOpUI0MoQl8eo5 → ozuWoyIwOTqeUUjKqOKiH}/_buildManifest.js +0 -0
  190. /package/.next/standalone/.next/static/{5yKM8NoTOpUI0MoQl8eo5 → ozuWoyIwOTqeUUjKqOKiH}/_clientMiddlewareManifest.js +0 -0
  191. /package/.next/standalone/.next/static/{5yKM8NoTOpUI0MoQl8eo5 → ozuWoyIwOTqeUUjKqOKiH}/_ssgManifest.js +0 -0
@@ -72,7 +72,7 @@ async function fetchPkgInfo(pkg) {
72
72
  });
73
73
  }
74
74
  const data = await res.json();
75
- const versionData = data.versions["16.3.5"];
75
+ const versionData = data.versions["16.3.6"];
76
76
  return {
77
77
  os: versionData.os,
78
78
  cpu: versionData.cpu,
@@ -100,7 +100,7 @@ async function patchIncorrectLockfile(dir) {
100
100
  const expectedSwcPkgs = Object.keys(_packagejson.optionalDependencies || {}).filter((pkg)=>pkg.startsWith('@next/swc-'));
101
101
  const patchDependency = (pkg, pkgData)=>{
102
102
  lockfileParsed.dependencies[pkg] = {
103
- version: "16.3.5",
103
+ version: "16.3.6",
104
104
  resolved: pkgData.tarball,
105
105
  integrity: pkgData.integrity,
106
106
  optional: true
@@ -108,7 +108,7 @@ async function patchIncorrectLockfile(dir) {
108
108
  };
109
109
  const patchPackage = (pkg, pkgData)=>{
110
110
  lockfileParsed.packages[pkg] = {
111
- version: "16.3.5",
111
+ version: "16.3.6",
112
112
  resolved: pkgData.tarball,
113
113
  integrity: pkgData.integrity,
114
114
  cpu: pkgData.cpu,
@@ -1305,7 +1305,7 @@ async function applyModifyConfig(config, phase, silent, dir) {
1305
1305
  }
1306
1306
  config = await adapterMod.modifyConfig(config, {
1307
1307
  phase,
1308
- nextVersion: "16.3.5",
1308
+ nextVersion: "16.3.6",
1309
1309
  projectDir: dir
1310
1310
  });
1311
1311
  }
@@ -302,7 +302,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
302
302
  }
303
303
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
304
304
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
305
- version: "16.3.5"
305
+ version: "16.3.6"
306
306
  });
307
307
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
308
308
  // of the current `next dev` invocation.
@@ -362,7 +362,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
362
362
  writeRoutesHashesManifest: false,
363
363
  currentNodeJsVersion,
364
364
  isPersistentCachingEnabled: (0, _utils2.isFileSystemCacheEnabledForDev)(opts.nextConfig),
365
- nextVersion: "16.3.5",
365
+ nextVersion: "16.3.6",
366
366
  serverHmr: serverFastRefresh
367
367
  }, {
368
368
  turbopackMemoryEviction: opts.nextConfig.experimental.turbopackMemoryEvictionMode,
@@ -234,7 +234,7 @@ class HotReloaderWebpack {
234
234
  this.previewProps = previewProps;
235
235
  this.rewrites = rewrites;
236
236
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
237
- version: "16.3.5"
237
+ version: "16.3.6"
238
238
  });
239
239
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
240
240
  // of the current `next dev` invocation.
@@ -79,7 +79,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
79
79
  }
80
80
  function logStartInfo({ networkUrl, appUrl, envInfo, logBundler }) {
81
81
  const versionSuffix = logBundler ? ` (${(0, _bundler.bundlerName)((0, _bundler.getBundlerFromEnv)())})` : '';
82
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.5"}`))}${versionSuffix}`);
82
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.6"}`))}${versionSuffix}`);
83
83
  if (appUrl) {
84
84
  _log.bootstrap(`- Local: ${appUrl}`);
85
85
  }
@@ -177,7 +177,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
177
177
  async function startServer(serverOptions) {
178
178
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate, serverFastRefresh } = serverOptions;
179
179
  let { port } = serverOptions;
180
- process.title = `next-server (v${"16.3.5"})`;
180
+ process.title = `next-server (v${"16.3.6"})`;
181
181
  let handlersReady = ()=>{};
182
182
  let handlersError = ()=>{};
183
183
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -82,7 +82,7 @@ async function getAnonymousMeta() {
82
82
  isWsl: _iswsl.default,
83
83
  isCI: _ciinfo.isCI,
84
84
  ciName: _ciinfo.isCI && _ciinfo.name || null,
85
- nextVersion: "16.3.5",
85
+ nextVersion: "16.3.6",
86
86
  agentName: await (0, _agentname.getAgentName)()
87
87
  };
88
88
  return traits;
@@ -38,7 +38,7 @@ async function eventSwcLoadFailure(event) {
38
38
  telemetry.record({
39
39
  eventName: EVENT_PLUGIN_PRESENT,
40
40
  payload: {
41
- nextVersion: "16.3.5",
41
+ nextVersion: "16.3.6",
42
42
  glibcVersion,
43
43
  installedSwcPackages,
44
44
  arch: process.arch,
@@ -12,12 +12,12 @@ const EVENT_VERSION = 'NEXT_CLI_SESSION_STARTED';
12
12
  function eventCliSession(nextConfig, event) {
13
13
  var _nextConfig_experimental, _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_reactCompiler, _nextConfig_reactCompiler1;
14
14
  // This should be an invariant, if it fails our build tooling is broken.
15
- if (typeof "16.3.5" !== 'string') {
15
+ if (typeof "16.3.6" !== 'string') {
16
16
  return [];
17
17
  }
18
18
  const { images, i18n } = nextConfig || {};
19
19
  const payload = {
20
- nextVersion: "16.3.5",
20
+ nextVersion: "16.3.6",
21
21
  nodeVersion: process.version,
22
22
  cliCommand: event.cliCommand,
23
23
  isSrcDir: event.isSrcDir,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next",
3
- "version": "16.3.5",
3
+ "version": "16.3.6",
4
4
  "description": "The React Framework",
5
5
  "main": "./dist/server/next.js",
6
6
  "license": "MIT",
@@ -81,7 +81,7 @@
81
81
  "next": "./dist/bin/next"
82
82
  },
83
83
  "dependencies": {
84
- "@next/env": "16.3.5",
84
+ "@next/env": "16.3.6",
85
85
  "@swc/helpers": "0.5.23",
86
86
  "baseline-browser-mapping": "^2.9.19",
87
87
  "caniuse-lite": "^1.0.30001579",
@@ -112,14 +112,14 @@
112
112
  },
113
113
  "optionalDependencies": {
114
114
  "sharp": "^0.35.4",
115
- "@next/swc-darwin-arm64": "16.3.5",
116
- "@next/swc-darwin-x64": "16.3.5",
117
- "@next/swc-linux-arm64-gnu": "16.3.5",
118
- "@next/swc-linux-arm64-musl": "16.3.5",
119
- "@next/swc-linux-x64-gnu": "16.3.5",
120
- "@next/swc-linux-x64-musl": "16.3.5",
121
- "@next/swc-win32-arm64-msvc": "16.3.5",
122
- "@next/swc-win32-x64-msvc": "16.3.5"
115
+ "@next/swc-darwin-arm64": "16.3.6",
116
+ "@next/swc-darwin-x64": "16.3.6",
117
+ "@next/swc-linux-arm64-gnu": "16.3.6",
118
+ "@next/swc-linux-arm64-musl": "16.3.6",
119
+ "@next/swc-linux-x64-gnu": "16.3.6",
120
+ "@next/swc-linux-x64-musl": "16.3.6",
121
+ "@next/swc-win32-arm64-msvc": "16.3.6",
122
+ "@next/swc-win32-x64-msvc": "16.3.6"
123
123
  },
124
124
  "keywords": [
125
125
  "react",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "failproofai",
3
- "version": "1.0.8",
3
+ "version": "1.0.9-beta.1",
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",
@@ -81,14 +81,14 @@
81
81
  "access": "public"
82
82
  },
83
83
  "devDependencies": {
84
- "@anthropic-ai/sdk": "^0.127.0",
84
+ "@anthropic-ai/sdk": "^0.128.0",
85
85
  "@mdx-js/mdx": "^3.1.1",
86
86
  "@tailwindcss/postcss": "^4.3.1",
87
87
  "@tanstack/react-virtual": "^3.14.10",
88
88
  "@testing-library/jest-dom": "^7.0.0",
89
89
  "@testing-library/react": "^16.3.2",
90
90
  "@testing-library/user-event": "^14.6.5",
91
- "@types/node": "26.6.1",
91
+ "@types/node": "26.6.2",
92
92
  "@types/react": "19.3.0",
93
93
  "@types/react-dom": "^19.2.3",
94
94
  "@vitejs/plugin-react": "^6.1.0",
@@ -116,21 +116,21 @@
116
116
  "postcss": "8.5.26",
117
117
  "eslint-plugin-react-hooks": "7.0.1",
118
118
  "vite": "8.0.16",
119
- "undici": "7.29.0",
119
+ "undici": "7.29.1",
120
120
  "brace-expansion": "5.0.9",
121
121
  "sharp": "0.35.4",
122
122
  "browserslist": "4.28.8"
123
123
  },
124
124
  "optionalDependencies": {
125
- "@failproofai/failproofaid-linux-x64": "1.0.8",
126
- "@failproofai/failproofaid-linux-arm64": "1.0.8",
127
- "@failproofai/failproofaid-darwin-x64": "1.0.8",
128
- "@failproofai/failproofaid-darwin-arm64": "1.0.8"
125
+ "@failproofai/failproofaid-linux-x64": "1.0.9-beta.1",
126
+ "@failproofai/failproofaid-linux-arm64": "1.0.9-beta.1",
127
+ "@failproofai/failproofaid-darwin-x64": "1.0.9-beta.1",
128
+ "@failproofai/failproofaid-darwin-arm64": "1.0.9-beta.1"
129
129
  },
130
130
  "failproofaidBinaries": {
131
- "linux-x64": "35b641f60e1724513fbb760db382123dad2b5fcdd67dda6373bda80651bd36bb",
132
- "linux-arm64": "a058288f5d08f99612f053793e5c7f59264d3da97f3dbe769e401b0f8536702d",
133
- "darwin-x64": "b4f3dbe4aea44e77cc10839647c0dc03a1b8b797dfb27e1d89a6a96554ef27b8",
134
- "darwin-arm64": "fd42f28bf92001d39117b488a215578b966f07d316214744aca64a1888f2aed2"
131
+ "linux-x64": "a0db1ad28bc0584bb4554b1dc60b55353fad9d982354880f9cc1e1ee567e5d36",
132
+ "linux-arm64": "b8d2797db8d93ce0deec86707093dd22ecd2d3fe2b137944938f4851d31718f1",
133
+ "darwin-x64": "94dc7ea33121c884736eadafc8281b0b752824b5c7fbe1726745bd1fa2b2a577",
134
+ "darwin-arm64": "8da18bbede18b8c112e8c46b6f0de798e84445c163a91a80edeef6d9e21da8ad"
135
135
  }
136
136
  }
@@ -1200,15 +1200,15 @@ wheels = [
1200
1200
 
1201
1201
  [[package]]
1202
1202
  name = "genai-prices"
1203
- version = "0.1.6"
1203
+ version = "0.1.9"
1204
1204
  source = { registry = "https://pypi.org/simple" }
1205
1205
  dependencies = [
1206
1206
  { name = "httpx2" },
1207
1207
  { name = "pydantic" },
1208
1208
  ]
1209
- sdist = { url = "https://files.pythonhosted.org/packages/1a/16/e5a507d42c0eb629b48ebe6c278f2d8c3f929bb6b28f18108bdd66d8ae12/genai_prices-0.1.6.tar.gz", hash = "sha256:802c1e4cc3ed5e70a09083b83af441a58d91f62e12768f7f1b6b26c98a33fcac", size = 111810, upload-time = "2026-09-02T14:53:54.895Z" }
1209
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/f0/4b4c7f63de6d558714d2207808080dd0988d0317a54ebcde790e4f6c1b6e/genai_prices-0.1.9.tar.gz", hash = "sha256:20ec774d32ec5d345510877fac415f2560bbfeb081bc4cd4e7ebce57a5503e8d", size = 118447, upload-time = "2026-09-25T03:47:27.569Z" }
1210
1210
  wheels = [
1211
- { url = "https://files.pythonhosted.org/packages/48/a1/43fa2a4c5557cd977e83eecec265b0b77b726b0c7b9f2f180b46c6fdb458/genai_prices-0.1.6-py3-none-any.whl", hash = "sha256:35ac8043dbcf2958488129413bfecba7304fe12a68ad4a78c5b0d15281e82814", size = 118834, upload-time = "2026-09-02T14:53:53.758Z" },
1211
+ { url = "https://files.pythonhosted.org/packages/1b/e0/57d07f653813b7ea9e3a82064a2b6a112f63004530ac665e0934829473c7/genai_prices-0.1.9-py3-none-any.whl", hash = "sha256:3da8faa0a126e4df7be36696b90abe2be1fea8826bfcf45d39d91bc397fa9d1d", size = 125549, upload-time = "2026-09-25T03:47:26.483Z" },
1212
1212
  ]
1213
1213
 
1214
1214
  [[package]]
@@ -2003,7 +2003,7 @@ wheels = [
2003
2003
 
2004
2004
  [[package]]
2005
2005
  name = "langchain-core"
2006
- version = "1.6.3"
2006
+ version = "1.6.5"
2007
2007
  source = { registry = "https://pypi.org/simple" }
2008
2008
  dependencies = [
2009
2009
  { name = "httpx" },
@@ -2017,9 +2017,9 @@ dependencies = [
2017
2017
  { name = "typing-extensions" },
2018
2018
  { name = "uuid-utils" },
2019
2019
  ]
2020
- sdist = { url = "https://files.pythonhosted.org/packages/06/d7/1482670ccebc863166852516a08a1956fc50da40fbe2fe7dd218abfef4a1/langchain_core-1.6.3.tar.gz", hash = "sha256:88b430944fbd4d40fa98135d6c873581d497b6f33515d01962337548e918df2f", size = 1006228, upload-time = "2026-09-11T17:37:45.614Z" }
2020
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/ed/ceecd3bfcfc77a94cf30a9f1506e907fdea447458825e01914a72d2d1a6f/langchain_core-1.6.5.tar.gz", hash = "sha256:bdb059fef65473fd444558dbb18f50901657402c43ceed9dc0fdc7b76a393c6b", size = 1007041, upload-time = "2026-09-24T18:11:06.487Z" }
2021
2021
  wheels = [
2022
- { url = "https://files.pythonhosted.org/packages/e6/18/cf18cfec118b02e003f35300b54d6a1173dc6e4905cffdf5ea49e390a7f9/langchain_core-1.6.3-py3-none-any.whl", hash = "sha256:114fe1868c9ed60606662b9dd0074bf3152cc6b0b1522ba37cbd6b04f55ca77d", size = 571753, upload-time = "2026-09-11T17:37:43.875Z" },
2022
+ { url = "https://files.pythonhosted.org/packages/59/68/447ac7e734990b7ed9dcfc3b6dee9a4cd4d4169e296429fa71a9a47c1c7b/langchain_core-1.6.5-py3-none-any.whl", hash = "sha256:54c7b0e9314b9084fb04405bb33dc5d32986d512d92b7b8863899cd5f6267556", size = 572136, upload-time = "2026-09-24T18:11:04.837Z" },
2023
2023
  ]
2024
2024
 
2025
2025
  [[package]]
@@ -2036,7 +2036,7 @@ wheels = [
2036
2036
 
2037
2037
  [[package]]
2038
2038
  name = "langgraph"
2039
- version = "1.2.11"
2039
+ version = "1.2.12"
2040
2040
  source = { registry = "https://pypi.org/simple" }
2041
2041
  dependencies = [
2042
2042
  { name = "langchain-core" },
@@ -2046,9 +2046,9 @@ dependencies = [
2046
2046
  { name = "pydantic" },
2047
2047
  { name = "xxhash" },
2048
2048
  ]
2049
- sdist = { url = "https://files.pythonhosted.org/packages/56/0d/c8e7ee98896659e1b6555db0ab115a9ca899844744645d5d894032bab1d7/langgraph-1.2.11.tar.gz", hash = "sha256:9ecfe11e50d338b34b15cf4d8a442642de103e8ae6971320efba84e4542eb363", size = 725753, upload-time = "2026-08-11T14:00:36.945Z" }
2049
+ sdist = { url = "https://files.pythonhosted.org/packages/99/7e/c9e4431adb5eb78d15f0035aae162a113c80d037ceb433ddd78835217848/langgraph-1.2.12.tar.gz", hash = "sha256:5fae9fa4ce771e90f10ff19ce0d5aaef4b41d7632c713d769e89cbce1241a4b9", size = 734541, upload-time = "2026-09-21T14:43:29.684Z" }
2050
2050
  wheels = [
2051
- { url = "https://files.pythonhosted.org/packages/0a/7f/c5c30e4be99ff821029c7ac872a480676bb179c9f3df85ea3f38d13f86d4/langgraph-1.2.11-py3-none-any.whl", hash = "sha256:8bab70de7b2d00b5300fb289bcf38d8b241400f3184c1e95e8ce706fb0e8686b", size = 248854, upload-time = "2026-08-11T14:00:35.494Z" },
2051
+ { url = "https://files.pythonhosted.org/packages/52/27/5a02054c535ed6fcfb2ab1e5c33c51c810cf1e773194ad28c928f0473509/langgraph-1.2.12-py3-none-any.whl", hash = "sha256:95403af7b510de8d79164742f71daaf866c69ca804a8cb72bef2cc1fa1ab9813", size = 250206, upload-time = "2026-09-21T14:43:28.196Z" },
2052
2052
  ]
2053
2053
 
2054
2054
  [[package]]
@@ -2141,7 +2141,7 @@ wheels = [
2141
2141
 
2142
2142
  [[package]]
2143
2143
  name = "llama-index-core"
2144
- version = "0.14.24"
2144
+ version = "0.14.25"
2145
2145
  source = { registry = "https://pypi.org/simple" }
2146
2146
  dependencies = [
2147
2147
  { name = "aiohttp" },
@@ -2176,9 +2176,9 @@ dependencies = [
2176
2176
  { name = "typing-inspect" },
2177
2177
  { name = "wrapt" },
2178
2178
  ]
2179
- sdist = { url = "https://files.pythonhosted.org/packages/d9/7a/e54d5ea405b51c1b7e1ed078036f698bcbeefc82128d5c48b7cb6d997ce6/llama_index_core-0.14.24.tar.gz", hash = "sha256:4b2eb3af98eecf3579707ef018be0346bd851be2c7660102d88fab0457b95b61", size = 11590565, upload-time = "2026-08-19T18:47:21.401Z" }
2179
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/70/fe1f0a92459c3692075875c1e09fc51494602daaeb71734045e1d9d815d3/llama_index_core-0.14.25.tar.gz", hash = "sha256:4ebfdc5317f0382501fa80262d7a7382715f80741cf41a7b11a52d4335e6f696", size = 11591384, upload-time = "2026-09-21T16:21:51.975Z" }
2180
2180
  wheels = [
2181
- { url = "https://files.pythonhosted.org/packages/be/f8/8a2aec65cba9459b24cce9bc188392014f70c2af0dc43c4cc668c685912e/llama_index_core-0.14.24-py3-none-any.whl", hash = "sha256:a12f39b8a777cc526bf400d929016cd244372af61c5e98f6f4186f51a0b9288c", size = 11927515, upload-time = "2026-08-19T18:47:18.772Z" },
2181
+ { url = "https://files.pythonhosted.org/packages/8c/20/60be179aaba858981edbe18eab106ff485967a9d3b198f8c58496cad9e32/llama_index_core-0.14.25-py3-none-any.whl", hash = "sha256:caa7d9c5ac9b13dc33400cf8d5e92e689b6d1e4497eb9bfa50d6f52ca2eb22a1", size = 11928254, upload-time = "2026-09-21T16:21:48.626Z" },
2182
2182
  ]
2183
2183
 
2184
2184
  [[package]]
@@ -3906,7 +3906,7 @@ wheels = [
3906
3906
 
3907
3907
  [[package]]
3908
3908
  name = "pydantic-ai-slim"
3909
- version = "2.45.0"
3909
+ version = "2.50.0"
3910
3910
  source = { registry = "https://pypi.org/simple" }
3911
3911
  dependencies = [
3912
3912
  { name = "anyio" },
@@ -3919,9 +3919,9 @@ dependencies = [
3919
3919
  { name = "pydantic-graph" },
3920
3920
  { name = "typing-inspection" },
3921
3921
  ]
3922
- sdist = { url = "https://files.pythonhosted.org/packages/70/ad/d39e46c192e04df2e620871592054185aed4e212558d90bf89436aa7628d/pydantic_ai_slim-2.45.0.tar.gz", hash = "sha256:34cf5216ebe05cb3d343129bb24a1bd011c66e89dd620f00afa982bd2484e3bf", size = 1562650, upload-time = "2026-09-18T04:50:15.315Z" }
3922
+ sdist = { url = "https://files.pythonhosted.org/packages/27/9a/a5a37121adfc6771aefc0d84a41b8fec690ee0951403925cb7cff9452c21/pydantic_ai_slim-2.50.0.tar.gz", hash = "sha256:aa1ab6bfca4590e09e70c9147c4712bdc3e435a6e38d63a4c84a30254b80965f", size = 1630594, upload-time = "2026-09-25T05:03:32.812Z" }
3923
3923
  wheels = [
3924
- { url = "https://files.pythonhosted.org/packages/de/5b/1397c8c65eaeae781ec489db648ab24125268b749d1f256ba7c13b07891e/pydantic_ai_slim-2.45.0-py3-none-any.whl", hash = "sha256:0914f4e307c64401b676bbba2d613da69f74dbeaab4e2e8516d0d9b53f4ab483", size = 1857668, upload-time = "2026-09-18T04:50:07.395Z" },
3924
+ { url = "https://files.pythonhosted.org/packages/d8/91/a91b43280c24f2fb014eed24ce3ac305d87b00721247741109a48803d569/pydantic_ai_slim-2.50.0-py3-none-any.whl", hash = "sha256:50bd9a355d31698f191b50070f5ab9c57faea2a59a5bd67715c1e23aa1d2a3b3", size = 1928462, upload-time = "2026-09-25T05:03:24.765Z" },
3925
3925
  ]
3926
3926
 
3927
3927
  [[package]]
@@ -4044,7 +4044,7 @@ wheels = [
4044
4044
 
4045
4045
  [[package]]
4046
4046
  name = "pydantic-graph"
4047
- version = "2.45.0"
4047
+ version = "2.50.0"
4048
4048
  source = { registry = "https://pypi.org/simple" }
4049
4049
  dependencies = [
4050
4050
  { name = "anyio" },
@@ -4052,9 +4052,9 @@ dependencies = [
4052
4052
  { name = "pydantic" },
4053
4053
  { name = "typing-inspection" },
4054
4054
  ]
4055
- sdist = { url = "https://files.pythonhosted.org/packages/56/ee/d4f4c73eb91241af7a06e4c36ef58c18d3622dc03d8343825464ec06cb2e/pydantic_graph-2.45.0.tar.gz", hash = "sha256:c07e8cee55f25d79ea2ea55de67fc67d0353ec2807e3a1328f42995edf022c23", size = 45192, upload-time = "2026-09-18T04:50:17.706Z" }
4055
+ sdist = { url = "https://files.pythonhosted.org/packages/ad/bf/230e4c04be14ed0f9c677210e375e4c65e9dac35781601cacdbde7f9fcce/pydantic_graph-2.50.0.tar.gz", hash = "sha256:15a4ab9594baec4c6ce74e7af1b7742f8e546d79c9896a4fea18c1bd83b2b536", size = 45254, upload-time = "2026-09-25T05:03:35.146Z" }
4056
4056
  wheels = [
4057
- { url = "https://files.pythonhosted.org/packages/27/56/d040149787ae9ade628f05c1e7f30657437731b0e2bb3a2cdb6cb979b7af/pydantic_graph-2.45.0-py3-none-any.whl", hash = "sha256:60fef7eab40a103510f0baf6d17cdd11418672cb64a7524089fbaf845f45aa1a", size = 52701, upload-time = "2026-09-18T04:50:10.72Z" },
4057
+ { url = "https://files.pythonhosted.org/packages/9b/3e/4ae59d3988f342bb8dd4a1f23b7add85cce879dffb75c1ab5ef4be35fc55/pydantic_graph-2.50.0-py3-none-any.whl", hash = "sha256:e43d9742a9924e1e5344fe3cf81a7f8c55d7a524fbc83bec523f284d0f1a31e5", size = 52763, upload-time = "2026-09-25T05:03:28.221Z" },
4058
4058
  ]
4059
4059
 
4060
4060
  [[package]]
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
9
9
  const hostname = process.env.HOSTNAME || '0.0.0.0'
10
10
 
11
11
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
12
- const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.8"},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/failproofai/failproofai","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","turbopackMemoryEvictionMode":"auto","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","outputFileTracingExcludes":{"*":["node_modules/@img/**","node_modules/sharp/**"]},"turbopack":{"root":"/home/runner/work/failproofai/failproofai"},"repoRoot":"/home/runner/work/failproofai/failproofai","distDirRoot":".next"}
12
+ const nextConfig = {"env":{"NEXT_PUBLIC_APP_VERSION":"1.0.9-beta.1"},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/failproofai/failproofai","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","turbopackMemoryEvictionMode":"auto","optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","outputFileTracingExcludes":{"*":["node_modules/@img/**","node_modules/sharp/**"]},"turbopack":{"root":"/home/runner/work/failproofai/failproofai"},"repoRoot":"/home/runner/work/failproofai/failproofai","distDirRoot":".next"}
13
13
 
14
14
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
15
15
 
@@ -965,7 +965,7 @@ async function runCli() {
965
965
  "",
966
966
  "FailproofAI Cloud needs no setup here: `failproofai config --token",
967
967
  "<key>` with a key that carries jev:evaluate (the \"machine\" preset)",
968
- "turns it on in shadow mode when there is no jev.json yet — except",
968
+ "turns it on in observe mode when there is no jev.json yet — except",
969
969
  "with --no-transcripts, which only stores the key; then",
970
970
  "`failproofai jev setup --provider failproofai` switches it on. Its",
971
971
  "key stays in credentials.json; no --url ever selects it.",
@@ -982,7 +982,7 @@ async function runCli() {
982
982
  ["--account-id <id>", "Cloudflare account id (32 hex characters)."],
983
983
  ["--base-url <url>", "Override the API base; `default` clears it."],
984
984
  ["--model <id>", "Override the model id; `default` clears it."],
985
- ["--mode <m>", "enforce (default), shadow (log Jev, enforce regex), or off."],
985
+ ["--mode <m>", "enforce (default), observe (log Jev, enforce regex), or off."],
986
986
  ["--timeout-ms <n>", "Per-call budget before falling back. Default 3000."],
987
987
  ],
988
988
  },
@@ -993,7 +993,7 @@ async function runCli() {
993
993
  " else can read — or one in a directory anyone else can WRITE, who",
994
994
  " could replace it — is refused; a repository can never set it.",
995
995
  "• Re-running setup for the same provider keeps the key, so",
996
- " `failproofai jev setup --mode shadow` just switches the mode.",
996
+ " `failproofai jev setup --mode observe` just switches the mode.",
997
997
  "• The daemon does not see your shell's environment: keep the key in",
998
998
  " the file on a machine set up with `failproofai config`.",
999
999
  "• --token is the fast path, not the safe one: your shell history keeps",
@@ -1007,7 +1007,7 @@ async function runCli() {
1007
1007
  "failproofai jev --url https://openrouter.ai/api/v1 --token <token>",
1008
1008
  "failproofai jev setup --provider typesafe --key-stdin < ~/typesafe.key",
1009
1009
  "failproofai jev setup --provider cloudflare --account-id <id> --key-stdin",
1010
- "failproofai config --token <key> (FailproofAI Cloud, shadow mode)",
1010
+ "failproofai config --token <key> (FailproofAI Cloud, observe mode)",
1011
1011
  "failproofai jev setup --mode enforce (switch the configured route's mode)",
1012
1012
  "failproofai jev setup --mode off (keep the config, stop asking Jev)",
1013
1013
  "failproofai jev test",
@@ -1180,6 +1180,9 @@ async function runCli() {
1180
1180
  "",
1181
1181
  "This does the rest of the upgrade: runs any pending layout migrations,",
1182
1182
  "puts the matching daemon binary in place, and restarts the service.",
1183
+ "Hermes profiles already using failproofai are moved to the linked",
1184
+ "native plugin (legacy shell hooks never checked Hermes cron jobs).",
1185
+ "Exits non-zero when any half could not be brought current.",
1183
1186
  ],
1184
1187
  },
1185
1188
  {
@@ -1270,17 +1273,40 @@ async function runCli() {
1270
1273
  }
1271
1274
  }
1272
1275
 
1276
+ // Hermes is migrated AFTER the daemon, and gated on what the daemon that is
1277
+ // now running can do: the native plugin needs `policyEvaluation`, which
1278
+ // ≤1.0.5 daemons lack, so when the swap above could not happen (a sudo
1279
+ // system service with no sudo) the shell hooks stay and this fails loudly.
1280
+ let hermesOk = true;
1281
+ let hermesMigrated = 0;
1282
+ try {
1283
+ const { runHermesUpdateMigration } = await import("../src/hooks/hermes-update");
1284
+ const svc = await import("../src/hooks/daemon-service");
1285
+ const hermesResult = await runHermesUpdateMigration({
1286
+ daemonSupportsPolicyEvaluation: () => svc.probeDaemonPolicyEvaluation(),
1287
+ });
1288
+ if (hermesResult.lines.length > 0) report.push("", ...hermesResult.lines);
1289
+ hermesOk = hermesResult.ok;
1290
+ hermesMigrated = hermesResult.profiles.filter((p) => p.status === "migrated").length;
1291
+ } catch (err) {
1292
+ report.push("", `Hermes migration failed: ${err instanceof Error ? err.message : String(err)}`);
1293
+ hermesOk = false;
1294
+ }
1295
+
1296
+ const updateOk = daemonOk && !migrationFailed && hermesOk;
1273
1297
  await printReport("update", report, {
1274
- ok: daemonOk && !migrationFailed,
1298
+ ok: updateOk,
1275
1299
  meta: `v${version}`,
1276
1300
  });
1277
1301
  await track("cli_update", {
1278
- ok: daemonOk && !migrationFailed,
1302
+ ok: updateOk,
1279
1303
  migrations: migrationsRan,
1280
1304
  migration_failed: migrationFailed,
1305
+ hermes_ok: hermesOk,
1306
+ hermes_migrated: hermesMigrated,
1281
1307
  });
1282
1308
  lastSubcommand = null;
1283
- await exitAfterFlush(daemonOk && !migrationFailed ? 0 : 1);
1309
+ await exitAfterFlush(updateOk ? 0 : 1);
1284
1310
  return;
1285
1311
  }
1286
1312