synabun 1.3.0 → 2.0.0-beta

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 (1153) hide show
  1. package/CHANGELOG.md +197 -662
  2. package/LICENSE-COMMERCIAL.md +33 -0
  3. package/NOTICE +17 -0
  4. package/README.md +175 -853
  5. package/THIRD-PARTY-LICENSES.md +131 -0
  6. package/benchmarks/browser-live-results.json +79 -0
  7. package/benchmarks/browser-v2-results.json +258 -0
  8. package/benchmarks/fixtures/browser/README.md +57 -0
  9. package/benchmarks/fixtures/browser/page-state.json +132 -0
  10. package/benchmarks/fixtures/browser/social.json +92 -0
  11. package/benchmarks/fixtures/browser/target.json +319 -0
  12. package/benchmarks/fixtures/desktop/README.md +58 -0
  13. package/benchmarks/fixtures/desktop/abstention.json +59 -0
  14. package/benchmarks/fixtures/desktop/adversarial.json +22 -0
  15. package/benchmarks/fixtures/desktop/forbidden.json +93 -0
  16. package/benchmarks/fixtures/desktop/generate.mjs +1023 -0
  17. package/benchmarks/fixtures/desktop/target.json +136 -0
  18. package/bin/synabun.js +30 -0
  19. package/docs/browser-v2.md +109 -0
  20. package/docs/hook-integrity.md +89 -0
  21. package/docs/judgments.md +182 -0
  22. package/docs/style-guide.md +246 -0
  23. package/docs/whatsapp.md +325 -0
  24. package/hooks/claude-code/post-plan.mjs +613 -391
  25. package/hooks/claude-code/post-remember.mjs +246 -122
  26. package/hooks/claude-code/pre-compact.mjs +171 -110
  27. package/hooks/claude-code/pre-task.mjs +133 -0
  28. package/hooks/claude-code/pre-websearch.mjs +15 -4
  29. package/hooks/claude-code/prompt-origin.mjs +94 -0
  30. package/hooks/claude-code/prompt-submit.mjs +1244 -861
  31. package/hooks/claude-code/session-start.mjs +114 -156
  32. package/hooks/claude-code/shared.mjs +1228 -368
  33. package/hooks/claude-code/state.mjs +167 -0
  34. package/hooks/claude-code/stop.mjs +515 -140
  35. package/hooks/claude-code/subagent-start.mjs +154 -0
  36. package/hooks/claude-code/subagent-stop.mjs +102 -0
  37. package/hooks/claude-code/task-gate.mjs +150 -0
  38. package/lib/claude-hooks.js +84 -0
  39. package/lib/claude-usage-audit.js +141 -0
  40. package/lib/client-config-repair.js +144 -0
  41. package/lib/data-home-migration.js +498 -0
  42. package/lib/first-launch-protection.js +240 -0
  43. package/lib/paths.d.ts +21 -0
  44. package/lib/paths.js +103 -0
  45. package/mcp-server/dist/config.d.ts +22 -0
  46. package/mcp-server/dist/config.d.ts.map +1 -0
  47. package/mcp-server/dist/config.js +109 -0
  48. package/mcp-server/dist/config.js.map +1 -0
  49. package/mcp-server/dist/http.d.ts +30 -0
  50. package/mcp-server/dist/http.d.ts.map +1 -0
  51. package/mcp-server/dist/http.js +276 -0
  52. package/mcp-server/dist/http.js.map +1 -0
  53. package/mcp-server/dist/index.d.ts +48 -0
  54. package/mcp-server/dist/index.d.ts.map +1 -0
  55. package/mcp-server/dist/index.js +538 -0
  56. package/mcp-server/dist/index.js.map +1 -0
  57. package/mcp-server/dist/preload-http.d.ts +3 -0
  58. package/mcp-server/dist/preload-http.d.ts.map +1 -0
  59. package/mcp-server/dist/preload-http.js +28 -0
  60. package/mcp-server/dist/preload-http.js.map +1 -0
  61. package/mcp-server/dist/preload.d.ts +3 -0
  62. package/mcp-server/dist/preload.d.ts.map +1 -0
  63. package/mcp-server/dist/preload.js +32 -0
  64. package/mcp-server/dist/preload.js.map +1 -0
  65. package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts +19 -0
  66. package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts.map +1 -0
  67. package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js +403 -0
  68. package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js.map +1 -0
  69. package/mcp-server/dist/scripts/setup-embeddings.d.ts +3 -0
  70. package/mcp-server/dist/scripts/setup-embeddings.d.ts.map +1 -0
  71. package/mcp-server/dist/scripts/setup-embeddings.js +15 -0
  72. package/mcp-server/dist/scripts/setup-embeddings.js.map +1 -0
  73. package/mcp-server/dist/services/assistant-judgments.d.ts +79 -0
  74. package/mcp-server/dist/services/assistant-judgments.d.ts.map +1 -0
  75. package/mcp-server/dist/services/assistant-judgments.js +128 -0
  76. package/mcp-server/dist/services/assistant-judgments.js.map +1 -0
  77. package/mcp-server/dist/services/browser-assist-gate.d.ts +314 -0
  78. package/mcp-server/dist/services/browser-assist-gate.d.ts.map +1 -0
  79. package/mcp-server/dist/services/browser-assist-gate.js +344 -0
  80. package/mcp-server/dist/services/browser-assist-gate.js.map +1 -0
  81. package/mcp-server/dist/services/browser-assist.d.ts +104 -0
  82. package/mcp-server/dist/services/browser-assist.d.ts.map +1 -0
  83. package/mcp-server/dist/services/browser-assist.js +282 -0
  84. package/mcp-server/dist/services/browser-assist.js.map +1 -0
  85. package/mcp-server/dist/services/browser-bench.d.ts +772 -0
  86. package/mcp-server/dist/services/browser-bench.d.ts.map +1 -0
  87. package/mcp-server/dist/services/browser-bench.js +424 -0
  88. package/mcp-server/dist/services/browser-bench.js.map +1 -0
  89. package/mcp-server/dist/services/browser-judgments.d.ts +196 -0
  90. package/mcp-server/dist/services/browser-judgments.d.ts.map +1 -0
  91. package/mcp-server/dist/services/browser-judgments.js +363 -0
  92. package/mcp-server/dist/services/browser-judgments.js.map +1 -0
  93. package/mcp-server/dist/services/browser-risk.d.ts +166 -0
  94. package/mcp-server/dist/services/browser-risk.d.ts.map +1 -0
  95. package/mcp-server/dist/services/browser-risk.js +458 -0
  96. package/mcp-server/dist/services/browser-risk.js.map +1 -0
  97. package/mcp-server/dist/services/categories.d.ts +61 -0
  98. package/mcp-server/dist/services/categories.d.ts.map +1 -0
  99. package/mcp-server/dist/services/categories.js +377 -0
  100. package/mcp-server/dist/services/categories.js.map +1 -0
  101. package/mcp-server/dist/services/codex-config-heal.d.ts +49 -0
  102. package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -0
  103. package/mcp-server/dist/services/codex-config-heal.js +346 -0
  104. package/mcp-server/dist/services/codex-config-heal.js.map +1 -0
  105. package/mcp-server/dist/services/desktop-assist-gate.d.ts +198 -0
  106. package/mcp-server/dist/services/desktop-assist-gate.d.ts.map +1 -0
  107. package/mcp-server/dist/services/desktop-assist-gate.js +202 -0
  108. package/mcp-server/dist/services/desktop-assist-gate.js.map +1 -0
  109. package/mcp-server/dist/services/desktop-assist.d.ts +104 -0
  110. package/mcp-server/dist/services/desktop-assist.d.ts.map +1 -0
  111. package/mcp-server/dist/services/desktop-assist.js +266 -0
  112. package/mcp-server/dist/services/desktop-assist.js.map +1 -0
  113. package/mcp-server/dist/services/desktop-bench.d.ts +553 -0
  114. package/mcp-server/dist/services/desktop-bench.d.ts.map +1 -0
  115. package/mcp-server/dist/services/desktop-bench.js +311 -0
  116. package/mcp-server/dist/services/desktop-bench.js.map +1 -0
  117. package/mcp-server/dist/services/desktop-client.d.ts +23 -0
  118. package/mcp-server/dist/services/desktop-client.d.ts.map +1 -0
  119. package/mcp-server/dist/services/desktop-client.js +79 -0
  120. package/mcp-server/dist/services/desktop-client.js.map +1 -0
  121. package/mcp-server/dist/services/desktop-judgments.d.ts +125 -0
  122. package/mcp-server/dist/services/desktop-judgments.d.ts.map +1 -0
  123. package/mcp-server/dist/services/desktop-judgments.js +177 -0
  124. package/mcp-server/dist/services/desktop-judgments.js.map +1 -0
  125. package/mcp-server/dist/services/desktop-risk.d.ts +283 -0
  126. package/mcp-server/dist/services/desktop-risk.d.ts.map +1 -0
  127. package/mcp-server/dist/services/desktop-risk.js +605 -0
  128. package/mcp-server/dist/services/desktop-risk.js.map +1 -0
  129. package/mcp-server/dist/services/discord.d.ts +112 -0
  130. package/mcp-server/dist/services/discord.d.ts.map +1 -0
  131. package/mcp-server/dist/services/discord.js +477 -0
  132. package/mcp-server/dist/services/discord.js.map +1 -0
  133. package/mcp-server/dist/services/edit-stale.d.ts +81 -0
  134. package/mcp-server/dist/services/edit-stale.d.ts.map +1 -0
  135. package/mcp-server/dist/services/edit-stale.js +358 -0
  136. package/mcp-server/dist/services/edit-stale.js.map +1 -0
  137. package/mcp-server/dist/services/embedding-service.d.ts +16 -0
  138. package/mcp-server/dist/services/embedding-service.d.ts.map +1 -0
  139. package/mcp-server/dist/services/embedding-service.js +126 -0
  140. package/mcp-server/dist/services/embedding-service.js.map +1 -0
  141. package/mcp-server/dist/services/embedding-worker.d.ts +2 -0
  142. package/mcp-server/dist/services/embedding-worker.d.ts.map +1 -0
  143. package/mcp-server/dist/services/embedding-worker.js +52 -0
  144. package/mcp-server/dist/services/embedding-worker.js.map +1 -0
  145. package/mcp-server/dist/services/fb-regions.d.ts +71 -0
  146. package/mcp-server/dist/services/fb-regions.d.ts.map +1 -0
  147. package/mcp-server/dist/services/fb-regions.js +211 -0
  148. package/mcp-server/dist/services/fb-regions.js.map +1 -0
  149. package/mcp-server/dist/services/file-checksums.d.ts +22 -0
  150. package/mcp-server/dist/services/file-checksums.d.ts.map +1 -0
  151. package/mcp-server/dist/services/file-checksums.js +55 -0
  152. package/mcp-server/dist/services/file-checksums.js.map +1 -0
  153. package/mcp-server/dist/services/file-excerpt.d.ts +24 -0
  154. package/mcp-server/dist/services/file-excerpt.d.ts.map +1 -0
  155. package/mcp-server/dist/services/file-excerpt.js +65 -0
  156. package/mcp-server/dist/services/file-excerpt.js.map +1 -0
  157. package/mcp-server/dist/services/identity.d.ts +124 -0
  158. package/mcp-server/dist/services/identity.d.ts.map +1 -0
  159. package/mcp-server/dist/services/identity.js +241 -0
  160. package/mcp-server/dist/services/identity.js.map +1 -0
  161. package/mcp-server/dist/services/local-embeddings.d.ts +2 -0
  162. package/mcp-server/dist/services/local-embeddings.d.ts.map +1 -0
  163. package/mcp-server/dist/services/local-embeddings.js +3 -0
  164. package/mcp-server/dist/services/local-embeddings.js.map +1 -0
  165. package/mcp-server/dist/services/memory-client.d.ts +4 -0
  166. package/mcp-server/dist/services/memory-client.d.ts.map +1 -0
  167. package/mcp-server/dist/services/memory-client.js +27 -0
  168. package/mcp-server/dist/services/memory-client.js.map +1 -0
  169. package/mcp-server/dist/services/memory-judge-backfill.d.ts +135 -0
  170. package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -0
  171. package/mcp-server/dist/services/memory-judge-backfill.js +510 -0
  172. package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -0
  173. package/mcp-server/dist/services/memory-judgments.d.ts +362 -0
  174. package/mcp-server/dist/services/memory-judgments.d.ts.map +1 -0
  175. package/mcp-server/dist/services/memory-judgments.js +674 -0
  176. package/mcp-server/dist/services/memory-judgments.js.map +1 -0
  177. package/mcp-server/dist/services/memory-maintenance.d.ts +108 -0
  178. package/mcp-server/dist/services/memory-maintenance.d.ts.map +1 -0
  179. package/mcp-server/dist/services/memory-maintenance.js +403 -0
  180. package/mcp-server/dist/services/memory-maintenance.js.map +1 -0
  181. package/mcp-server/dist/services/memory-retrieval.d.ts +66 -0
  182. package/mcp-server/dist/services/memory-retrieval.d.ts.map +1 -0
  183. package/mcp-server/dist/services/memory-retrieval.js +412 -0
  184. package/mcp-server/dist/services/memory-retrieval.js.map +1 -0
  185. package/mcp-server/dist/services/memory-schema.d.ts +16 -0
  186. package/mcp-server/dist/services/memory-schema.d.ts.map +1 -0
  187. package/mcp-server/dist/services/memory-schema.js +282 -0
  188. package/mcp-server/dist/services/memory-schema.js.map +1 -0
  189. package/mcp-server/dist/services/memory-sessions.d.ts +24 -0
  190. package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -0
  191. package/mcp-server/dist/services/memory-sessions.js +110 -0
  192. package/mcp-server/dist/services/memory-sessions.js.map +1 -0
  193. package/mcp-server/dist/services/memory-triage.d.ts +60 -0
  194. package/mcp-server/dist/services/memory-triage.d.ts.map +1 -0
  195. package/mcp-server/dist/services/memory-triage.js +189 -0
  196. package/mcp-server/dist/services/memory-triage.js.map +1 -0
  197. package/mcp-server/dist/services/memory-verification.d.ts +24 -0
  198. package/mcp-server/dist/services/memory-verification.d.ts.map +1 -0
  199. package/mcp-server/dist/services/memory-verification.js +92 -0
  200. package/mcp-server/dist/services/memory-verification.js.map +1 -0
  201. package/mcp-server/dist/services/memory-writer.d.ts +26 -0
  202. package/mcp-server/dist/services/memory-writer.d.ts.map +1 -0
  203. package/mcp-server/dist/services/memory-writer.js +126 -0
  204. package/mcp-server/dist/services/memory-writer.js.map +1 -0
  205. package/mcp-server/dist/services/neural-interface.d.ts +439 -0
  206. package/mcp-server/dist/services/neural-interface.d.ts.map +1 -0
  207. package/mcp-server/dist/services/neural-interface.js +1135 -0
  208. package/mcp-server/dist/services/neural-interface.js.map +1 -0
  209. package/mcp-server/dist/services/profiles.d.ts +120 -0
  210. package/mcp-server/dist/services/profiles.d.ts.map +1 -0
  211. package/mcp-server/dist/services/profiles.js +387 -0
  212. package/mcp-server/dist/services/profiles.js.map +1 -0
  213. package/mcp-server/dist/services/secret-gate.d.ts +29 -0
  214. package/mcp-server/dist/services/secret-gate.d.ts.map +1 -0
  215. package/mcp-server/dist/services/secret-gate.js +43 -0
  216. package/mcp-server/dist/services/secret-gate.js.map +1 -0
  217. package/mcp-server/dist/services/server-instructions.d.ts +10 -0
  218. package/mcp-server/dist/services/server-instructions.d.ts.map +1 -0
  219. package/mcp-server/dist/services/server-instructions.js +101 -0
  220. package/mcp-server/dist/services/server-instructions.js.map +1 -0
  221. package/mcp-server/dist/services/sqlite.d.ts +235 -0
  222. package/mcp-server/dist/services/sqlite.d.ts.map +1 -0
  223. package/mcp-server/dist/services/sqlite.js +1185 -0
  224. package/mcp-server/dist/services/sqlite.js.map +1 -0
  225. package/mcp-server/dist/services/typesafe-bench.d.ts +99 -0
  226. package/mcp-server/dist/services/typesafe-bench.d.ts.map +1 -0
  227. package/mcp-server/dist/services/typesafe-bench.js +218 -0
  228. package/mcp-server/dist/services/typesafe-bench.js.map +1 -0
  229. package/mcp-server/dist/services/typesafe-config.d.ts +342 -0
  230. package/mcp-server/dist/services/typesafe-config.d.ts.map +1 -0
  231. package/mcp-server/dist/services/typesafe-config.js +746 -0
  232. package/mcp-server/dist/services/typesafe-config.js.map +1 -0
  233. package/mcp-server/dist/services/typesafe.d.ts +213 -0
  234. package/mcp-server/dist/services/typesafe.d.ts.map +1 -0
  235. package/mcp-server/dist/services/typesafe.js +330 -0
  236. package/mcp-server/dist/services/typesafe.js.map +1 -0
  237. package/mcp-server/dist/services/vector-cache.d.ts +68 -0
  238. package/mcp-server/dist/services/vector-cache.d.ts.map +1 -0
  239. package/mcp-server/dist/services/vector-cache.js +271 -0
  240. package/mcp-server/dist/services/vector-cache.js.map +1 -0
  241. package/mcp-server/dist/services/whiteboard-geometry.d.ts +305 -0
  242. package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -0
  243. package/mcp-server/dist/services/whiteboard-geometry.js +666 -0
  244. package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -0
  245. package/mcp-server/dist/tools/agents.d.ts +212 -0
  246. package/mcp-server/dist/tools/agents.d.ts.map +1 -0
  247. package/mcp-server/dist/tools/agents.js +407 -0
  248. package/mcp-server/dist/tools/agents.js.map +1 -0
  249. package/mcp-server/dist/tools/bluesky.d.ts +39 -0
  250. package/mcp-server/dist/tools/bluesky.d.ts.map +1 -0
  251. package/mcp-server/dist/tools/bluesky.js +1144 -0
  252. package/mcp-server/dist/tools/bluesky.js.map +1 -0
  253. package/mcp-server/dist/tools/browser-advanced.d.ts +58 -0
  254. package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -0
  255. package/mcp-server/dist/tools/browser-advanced.js +106 -0
  256. package/mcp-server/dist/tools/browser-advanced.js.map +1 -0
  257. package/mcp-server/dist/tools/browser-batch.d.ts +99 -0
  258. package/mcp-server/dist/tools/browser-batch.d.ts.map +1 -0
  259. package/mcp-server/dist/tools/browser-batch.js +187 -0
  260. package/mcp-server/dist/tools/browser-batch.js.map +1 -0
  261. package/mcp-server/dist/tools/browser-cheatsheet.d.ts +21 -0
  262. package/mcp-server/dist/tools/browser-cheatsheet.d.ts.map +1 -0
  263. package/mcp-server/dist/tools/browser-cheatsheet.js +144 -0
  264. package/mcp-server/dist/tools/browser-cheatsheet.js.map +1 -0
  265. package/mcp-server/dist/tools/browser-interact.d.ts +239 -0
  266. package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -0
  267. package/mcp-server/dist/tools/browser-interact.js +300 -0
  268. package/mcp-server/dist/tools/browser-interact.js.map +1 -0
  269. package/mcp-server/dist/tools/browser-navigate.d.ts +90 -0
  270. package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -0
  271. package/mcp-server/dist/tools/browser-navigate.js +142 -0
  272. package/mcp-server/dist/tools/browser-navigate.js.map +1 -0
  273. package/mcp-server/dist/tools/browser-observe.d.ts +561 -0
  274. package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -0
  275. package/mcp-server/dist/tools/browser-observe.js +2009 -0
  276. package/mcp-server/dist/tools/browser-observe.js.map +1 -0
  277. package/mcp-server/dist/tools/browser.d.ts +34 -0
  278. package/mcp-server/dist/tools/browser.d.ts.map +1 -0
  279. package/mcp-server/dist/tools/browser.js +112 -0
  280. package/mcp-server/dist/tools/browser.js.map +1 -0
  281. package/mcp-server/dist/tools/card-tools.d.ts +82 -0
  282. package/mcp-server/dist/tools/card-tools.d.ts.map +1 -0
  283. package/mcp-server/dist/tools/card-tools.js +137 -0
  284. package/mcp-server/dist/tools/card-tools.js.map +1 -0
  285. package/mcp-server/dist/tools/card.d.ts +8 -0
  286. package/mcp-server/dist/tools/card.d.ts.map +1 -0
  287. package/mcp-server/dist/tools/card.js +16 -0
  288. package/mcp-server/dist/tools/card.js.map +1 -0
  289. package/mcp-server/dist/tools/category.d.ts +32 -0
  290. package/mcp-server/dist/tools/category.d.ts.map +1 -0
  291. package/mcp-server/dist/tools/category.js +290 -0
  292. package/mcp-server/dist/tools/category.js.map +1 -0
  293. package/mcp-server/dist/tools/choice.d.ts +160 -0
  294. package/mcp-server/dist/tools/choice.d.ts.map +1 -0
  295. package/mcp-server/dist/tools/choice.js +80 -0
  296. package/mcp-server/dist/tools/choice.js.map +1 -0
  297. package/mcp-server/dist/tools/computer.d.ts +71 -0
  298. package/mcp-server/dist/tools/computer.d.ts.map +1 -0
  299. package/mcp-server/dist/tools/computer.js +174 -0
  300. package/mcp-server/dist/tools/computer.js.map +1 -0
  301. package/mcp-server/dist/tools/discord-channel.d.ts +44 -0
  302. package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -0
  303. package/mcp-server/dist/tools/discord-channel.js +236 -0
  304. package/mcp-server/dist/tools/discord-channel.js.map +1 -0
  305. package/mcp-server/dist/tools/discord-guild.d.ts +20 -0
  306. package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -0
  307. package/mcp-server/dist/tools/discord-guild.js +138 -0
  308. package/mcp-server/dist/tools/discord-guild.js.map +1 -0
  309. package/mcp-server/dist/tools/discord-member.d.ts +26 -0
  310. package/mcp-server/dist/tools/discord-member.d.ts.map +1 -0
  311. package/mcp-server/dist/tools/discord-member.js +122 -0
  312. package/mcp-server/dist/tools/discord-member.js.map +1 -0
  313. package/mcp-server/dist/tools/discord-message.d.ts +36 -0
  314. package/mcp-server/dist/tools/discord-message.d.ts.map +1 -0
  315. package/mcp-server/dist/tools/discord-message.js +184 -0
  316. package/mcp-server/dist/tools/discord-message.js.map +1 -0
  317. package/mcp-server/dist/tools/discord-onboarding.d.ts +32 -0
  318. package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -0
  319. package/mcp-server/dist/tools/discord-onboarding.js +179 -0
  320. package/mcp-server/dist/tools/discord-onboarding.js.map +1 -0
  321. package/mcp-server/dist/tools/discord-role.d.ts +34 -0
  322. package/mcp-server/dist/tools/discord-role.d.ts.map +1 -0
  323. package/mcp-server/dist/tools/discord-role.js +178 -0
  324. package/mcp-server/dist/tools/discord-role.js.map +1 -0
  325. package/mcp-server/dist/tools/discord-thread.d.ts +28 -0
  326. package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -0
  327. package/mcp-server/dist/tools/discord-thread.js +88 -0
  328. package/mcp-server/dist/tools/discord-thread.js.map +1 -0
  329. package/mcp-server/dist/tools/discord-webhook.d.ts +32 -0
  330. package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -0
  331. package/mcp-server/dist/tools/discord-webhook.js +154 -0
  332. package/mcp-server/dist/tools/discord-webhook.js.map +1 -0
  333. package/mcp-server/dist/tools/discord.d.ts +7 -0
  334. package/mcp-server/dist/tools/discord.d.ts.map +1 -0
  335. package/mcp-server/dist/tools/discord.js +25 -0
  336. package/mcp-server/dist/tools/discord.js.map +1 -0
  337. package/mcp-server/dist/tools/fb-groups.d.ts +98 -0
  338. package/mcp-server/dist/tools/fb-groups.d.ts.map +1 -0
  339. package/mcp-server/dist/tools/fb-groups.js +369 -0
  340. package/mcp-server/dist/tools/fb-groups.js.map +1 -0
  341. package/mcp-server/dist/tools/forget.d.ts +14 -0
  342. package/mcp-server/dist/tools/forget.d.ts.map +1 -0
  343. package/mcp-server/dist/tools/forget.js +26 -0
  344. package/mcp-server/dist/tools/forget.js.map +1 -0
  345. package/mcp-server/dist/tools/git-tools.d.ts +24 -0
  346. package/mcp-server/dist/tools/git-tools.d.ts.map +1 -0
  347. package/mcp-server/dist/tools/git-tools.js +107 -0
  348. package/mcp-server/dist/tools/git-tools.js.map +1 -0
  349. package/mcp-server/dist/tools/git.d.ts +7 -0
  350. package/mcp-server/dist/tools/git.d.ts.map +1 -0
  351. package/mcp-server/dist/tools/git.js +11 -0
  352. package/mcp-server/dist/tools/git.js.map +1 -0
  353. package/mcp-server/dist/tools/gsc/experience.d.ts +135 -0
  354. package/mcp-server/dist/tools/gsc/experience.d.ts.map +1 -0
  355. package/mcp-server/dist/tools/gsc/experience.js +351 -0
  356. package/mcp-server/dist/tools/gsc/experience.js.map +1 -0
  357. package/mcp-server/dist/tools/gsc/helpers.d.ts +78 -0
  358. package/mcp-server/dist/tools/gsc/helpers.d.ts.map +1 -0
  359. package/mcp-server/dist/tools/gsc/helpers.js +258 -0
  360. package/mcp-server/dist/tools/gsc/helpers.js.map +1 -0
  361. package/mcp-server/dist/tools/gsc/indexing.d.ts +121 -0
  362. package/mcp-server/dist/tools/gsc/indexing.d.ts.map +1 -0
  363. package/mcp-server/dist/tools/gsc/indexing.js +357 -0
  364. package/mcp-server/dist/tools/gsc/indexing.js.map +1 -0
  365. package/mcp-server/dist/tools/gsc/inspect.d.ts +78 -0
  366. package/mcp-server/dist/tools/gsc/inspect.d.ts.map +1 -0
  367. package/mcp-server/dist/tools/gsc/inspect.js +321 -0
  368. package/mcp-server/dist/tools/gsc/inspect.js.map +1 -0
  369. package/mcp-server/dist/tools/gsc/navigate.d.ts +44 -0
  370. package/mcp-server/dist/tools/gsc/navigate.d.ts.map +1 -0
  371. package/mcp-server/dist/tools/gsc/navigate.js +197 -0
  372. package/mcp-server/dist/tools/gsc/navigate.js.map +1 -0
  373. package/mcp-server/dist/tools/gsc/performance.d.ts +84 -0
  374. package/mcp-server/dist/tools/gsc/performance.d.ts.map +1 -0
  375. package/mcp-server/dist/tools/gsc/performance.js +274 -0
  376. package/mcp-server/dist/tools/gsc/performance.js.map +1 -0
  377. package/mcp-server/dist/tools/gsc/settings.d.ts +153 -0
  378. package/mcp-server/dist/tools/gsc/settings.d.ts.map +1 -0
  379. package/mcp-server/dist/tools/gsc/settings.js +425 -0
  380. package/mcp-server/dist/tools/gsc/settings.js.map +1 -0
  381. package/mcp-server/dist/tools/gsc.d.ts +7 -0
  382. package/mcp-server/dist/tools/gsc.d.ts.map +1 -0
  383. package/mcp-server/dist/tools/gsc.js +51 -0
  384. package/mcp-server/dist/tools/gsc.js.map +1 -0
  385. package/mcp-server/dist/tools/image-tools.d.ts +24 -0
  386. package/mcp-server/dist/tools/image-tools.d.ts.map +1 -0
  387. package/mcp-server/dist/tools/image-tools.js +80 -0
  388. package/mcp-server/dist/tools/image-tools.js.map +1 -0
  389. package/mcp-server/dist/tools/image.d.ts +10 -0
  390. package/mcp-server/dist/tools/image.d.ts.map +1 -0
  391. package/mcp-server/dist/tools/image.js +14 -0
  392. package/mcp-server/dist/tools/image.js.map +1 -0
  393. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +97 -0
  394. package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -0
  395. package/mcp-server/dist/tools/leonardo-browser-tools.js +228 -0
  396. package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -0
  397. package/mcp-server/dist/tools/leonardo.d.ts +13 -0
  398. package/mcp-server/dist/tools/leonardo.d.ts.map +1 -0
  399. package/mcp-server/dist/tools/leonardo.js +21 -0
  400. package/mcp-server/dist/tools/leonardo.js.map +1 -0
  401. package/mcp-server/dist/tools/loop.d.ts +30 -0
  402. package/mcp-server/dist/tools/loop.d.ts.map +1 -0
  403. package/mcp-server/dist/tools/loop.js +401 -0
  404. package/mcp-server/dist/tools/loop.js.map +1 -0
  405. package/mcp-server/dist/tools/memories.d.ts +56 -0
  406. package/mcp-server/dist/tools/memories.d.ts.map +1 -0
  407. package/mcp-server/dist/tools/memories.js +171 -0
  408. package/mcp-server/dist/tools/memories.js.map +1 -0
  409. package/mcp-server/dist/tools/morelogin.d.ts +24 -0
  410. package/mcp-server/dist/tools/morelogin.d.ts.map +1 -0
  411. package/mcp-server/dist/tools/morelogin.js +79 -0
  412. package/mcp-server/dist/tools/morelogin.js.map +1 -0
  413. package/mcp-server/dist/tools/profile.d.ts +17 -0
  414. package/mcp-server/dist/tools/profile.d.ts.map +1 -0
  415. package/mcp-server/dist/tools/profile.js +114 -0
  416. package/mcp-server/dist/tools/profile.js.map +1 -0
  417. package/mcp-server/dist/tools/recall.d.ts +71 -0
  418. package/mcp-server/dist/tools/recall.d.ts.map +1 -0
  419. package/mcp-server/dist/tools/recall.js +147 -0
  420. package/mcp-server/dist/tools/recall.js.map +1 -0
  421. package/mcp-server/dist/tools/reflect.d.ts +56 -0
  422. package/mcp-server/dist/tools/reflect.d.ts.map +1 -0
  423. package/mcp-server/dist/tools/reflect.js +157 -0
  424. package/mcp-server/dist/tools/reflect.js.map +1 -0
  425. package/mcp-server/dist/tools/remember.d.ts +62 -0
  426. package/mcp-server/dist/tools/remember.d.ts.map +1 -0
  427. package/mcp-server/dist/tools/remember.js +201 -0
  428. package/mcp-server/dist/tools/remember.js.map +1 -0
  429. package/mcp-server/dist/tools/response.d.ts +23 -0
  430. package/mcp-server/dist/tools/response.d.ts.map +1 -0
  431. package/mcp-server/dist/tools/response.js +24 -0
  432. package/mcp-server/dist/tools/response.js.map +1 -0
  433. package/mcp-server/dist/tools/restore.d.ts +14 -0
  434. package/mcp-server/dist/tools/restore.d.ts.map +1 -0
  435. package/mcp-server/dist/tools/restore.js +23 -0
  436. package/mcp-server/dist/tools/restore.js.map +1 -0
  437. package/mcp-server/dist/tools/style-guide-tools.d.ts +51 -0
  438. package/mcp-server/dist/tools/style-guide-tools.d.ts.map +1 -0
  439. package/mcp-server/dist/tools/style-guide-tools.js +231 -0
  440. package/mcp-server/dist/tools/style-guide-tools.js.map +1 -0
  441. package/mcp-server/dist/tools/style-guide.d.ts +8 -0
  442. package/mcp-server/dist/tools/style-guide.d.ts.map +1 -0
  443. package/mcp-server/dist/tools/style-guide.js +12 -0
  444. package/mcp-server/dist/tools/style-guide.js.map +1 -0
  445. package/mcp-server/dist/tools/sync.d.ts +20 -0
  446. package/mcp-server/dist/tools/sync.d.ts.map +1 -0
  447. package/mcp-server/dist/tools/sync.js +156 -0
  448. package/mcp-server/dist/tools/sync.js.map +1 -0
  449. package/mcp-server/dist/tools/tictactoe-tools.d.ts +18 -0
  450. package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -0
  451. package/mcp-server/dist/tools/tictactoe-tools.js +78 -0
  452. package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -0
  453. package/mcp-server/dist/tools/tictactoe.d.ts +7 -0
  454. package/mcp-server/dist/tools/tictactoe.d.ts.map +1 -0
  455. package/mcp-server/dist/tools/tictactoe.js +11 -0
  456. package/mcp-server/dist/tools/tictactoe.js.map +1 -0
  457. package/mcp-server/dist/tools/utils.d.ts +19 -0
  458. package/mcp-server/dist/tools/utils.d.ts.map +1 -0
  459. package/mcp-server/dist/tools/utils.js +54 -0
  460. package/mcp-server/dist/tools/utils.js.map +1 -0
  461. package/mcp-server/dist/tools/whiteboard-format.d.ts +88 -0
  462. package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -0
  463. package/mcp-server/dist/tools/whiteboard-format.js +337 -0
  464. package/mcp-server/dist/tools/whiteboard-format.js.map +1 -0
  465. package/mcp-server/dist/tools/whiteboard-tools.d.ts +326 -0
  466. package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -0
  467. package/mcp-server/dist/tools/whiteboard-tools.js +222 -0
  468. package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -0
  469. package/mcp-server/dist/tools/whiteboard.d.ts +8 -0
  470. package/mcp-server/dist/tools/whiteboard.d.ts.map +1 -0
  471. package/mcp-server/dist/tools/whiteboard.js +16 -0
  472. package/mcp-server/dist/tools/whiteboard.js.map +1 -0
  473. package/mcp-server/dist/tools/youtube/analytics.d.ts +46 -0
  474. package/mcp-server/dist/tools/youtube/analytics.d.ts.map +1 -0
  475. package/mcp-server/dist/tools/youtube/analytics.js +83 -0
  476. package/mcp-server/dist/tools/youtube/analytics.js.map +1 -0
  477. package/mcp-server/dist/tools/youtube/dedup.d.ts +35 -0
  478. package/mcp-server/dist/tools/youtube/dedup.d.ts.map +1 -0
  479. package/mcp-server/dist/tools/youtube/dedup.js +56 -0
  480. package/mcp-server/dist/tools/youtube/dedup.js.map +1 -0
  481. package/mcp-server/dist/tools/youtube/download.d.ts +31 -0
  482. package/mcp-server/dist/tools/youtube/download.d.ts.map +1 -0
  483. package/mcp-server/dist/tools/youtube/download.js +30 -0
  484. package/mcp-server/dist/tools/youtube/download.js.map +1 -0
  485. package/mcp-server/dist/tools/youtube/helpers.d.ts +66 -0
  486. package/mcp-server/dist/tools/youtube/helpers.d.ts.map +1 -0
  487. package/mcp-server/dist/tools/youtube/helpers.js +143 -0
  488. package/mcp-server/dist/tools/youtube/helpers.js.map +1 -0
  489. package/mcp-server/dist/tools/youtube/media.d.ts +43 -0
  490. package/mcp-server/dist/tools/youtube/media.d.ts.map +1 -0
  491. package/mcp-server/dist/tools/youtube/media.js +97 -0
  492. package/mcp-server/dist/tools/youtube/media.js.map +1 -0
  493. package/mcp-server/dist/tools/youtube/metadata.d.ts +33 -0
  494. package/mcp-server/dist/tools/youtube/metadata.d.ts.map +1 -0
  495. package/mcp-server/dist/tools/youtube/metadata.js +106 -0
  496. package/mcp-server/dist/tools/youtube/metadata.js.map +1 -0
  497. package/mcp-server/dist/tools/youtube/navigate.d.ts +30 -0
  498. package/mcp-server/dist/tools/youtube/navigate.d.ts.map +1 -0
  499. package/mcp-server/dist/tools/youtube/navigate.js +71 -0
  500. package/mcp-server/dist/tools/youtube/navigate.js.map +1 -0
  501. package/mcp-server/dist/tools/youtube/playlist.d.ts +29 -0
  502. package/mcp-server/dist/tools/youtube/playlist.d.ts.map +1 -0
  503. package/mcp-server/dist/tools/youtube/playlist.js +128 -0
  504. package/mcp-server/dist/tools/youtube/playlist.js.map +1 -0
  505. package/mcp-server/dist/tools/youtube/schedule.d.ts +31 -0
  506. package/mcp-server/dist/tools/youtube/schedule.d.ts.map +1 -0
  507. package/mcp-server/dist/tools/youtube/schedule.js +147 -0
  508. package/mcp-server/dist/tools/youtube/schedule.js.map +1 -0
  509. package/mcp-server/dist/tools/youtube/source.d.ts +36 -0
  510. package/mcp-server/dist/tools/youtube/source.d.ts.map +1 -0
  511. package/mcp-server/dist/tools/youtube/source.js +85 -0
  512. package/mcp-server/dist/tools/youtube/source.js.map +1 -0
  513. package/mcp-server/dist/tools/youtube/upload.d.ts +53 -0
  514. package/mcp-server/dist/tools/youtube/upload.d.ts.map +1 -0
  515. package/mcp-server/dist/tools/youtube/upload.js +255 -0
  516. package/mcp-server/dist/tools/youtube/upload.js.map +1 -0
  517. package/mcp-server/dist/tools/youtube.d.ts +12 -0
  518. package/mcp-server/dist/tools/youtube.d.ts.map +1 -0
  519. package/mcp-server/dist/tools/youtube.js +38 -0
  520. package/mcp-server/dist/tools/youtube.js.map +1 -0
  521. package/mcp-server/dist/tui.d.ts +3 -0
  522. package/mcp-server/dist/tui.d.ts.map +1 -0
  523. package/mcp-server/dist/tui.js +806 -0
  524. package/mcp-server/dist/tui.js.map +1 -0
  525. package/mcp-server/dist/types.d.ts +77 -0
  526. package/mcp-server/dist/types.d.ts.map +1 -0
  527. package/mcp-server/dist/types.js +2 -0
  528. package/mcp-server/dist/types.js.map +1 -0
  529. package/mcp-server/package-lock.json +4798 -0
  530. package/mcp-server/package.json +55 -38
  531. package/mcp-server/run.mjs +12 -2
  532. package/mcp-server/src/config.ts +48 -3
  533. package/mcp-server/src/http.ts +296 -93
  534. package/mcp-server/src/index.ts +546 -203
  535. package/mcp-server/src/preload-http.ts +19 -18
  536. package/mcp-server/src/preload.ts +19 -18
  537. package/mcp-server/src/scripts/setup-embeddings.ts +9 -0
  538. package/mcp-server/src/services/assistant-judgments.ts +157 -0
  539. package/mcp-server/src/services/browser-assist-gate.ts +383 -0
  540. package/mcp-server/src/services/browser-assist.ts +267 -0
  541. package/mcp-server/src/services/browser-bench.ts +477 -0
  542. package/mcp-server/src/services/browser-judgments.ts +414 -0
  543. package/mcp-server/src/services/browser-risk.ts +484 -0
  544. package/mcp-server/src/services/categories.ts +36 -19
  545. package/mcp-server/src/services/codex-config-heal.ts +403 -0
  546. package/mcp-server/src/services/desktop-assist-gate.ts +251 -0
  547. package/mcp-server/src/services/desktop-assist.ts +308 -0
  548. package/mcp-server/src/services/desktop-bench.ts +372 -0
  549. package/mcp-server/src/services/desktop-client.ts +76 -0
  550. package/mcp-server/src/services/desktop-judgments.ts +218 -0
  551. package/mcp-server/src/services/desktop-risk.ts +743 -0
  552. package/mcp-server/src/services/edit-stale.ts +299 -0
  553. package/mcp-server/src/services/embedding-service.ts +108 -0
  554. package/mcp-server/src/services/embedding-worker.ts +46 -0
  555. package/mcp-server/src/services/fb-regions.ts +221 -0
  556. package/mcp-server/src/services/file-checksums.ts +26 -9
  557. package/mcp-server/src/services/file-excerpt.ts +59 -0
  558. package/mcp-server/src/services/identity.ts +291 -0
  559. package/mcp-server/src/services/local-embeddings.ts +2 -77
  560. package/mcp-server/src/services/memory-client.ts +23 -0
  561. package/mcp-server/src/services/memory-judge-backfill.ts +462 -0
  562. package/mcp-server/src/services/memory-judgments.ts +901 -0
  563. package/mcp-server/src/services/memory-maintenance.ts +360 -0
  564. package/mcp-server/src/services/memory-retrieval.ts +349 -0
  565. package/mcp-server/src/services/memory-schema.ts +280 -0
  566. package/mcp-server/src/services/memory-sessions.ts +87 -0
  567. package/mcp-server/src/services/memory-triage.ts +182 -0
  568. package/mcp-server/src/services/memory-verification.ts +68 -0
  569. package/mcp-server/src/services/memory-writer.ts +125 -0
  570. package/mcp-server/src/services/neural-interface.ts +1217 -73
  571. package/mcp-server/src/services/profiles.ts +428 -0
  572. package/mcp-server/src/services/secret-gate.ts +52 -0
  573. package/mcp-server/src/services/server-instructions.ts +122 -0
  574. package/mcp-server/src/services/sqlite.ts +1456 -823
  575. package/mcp-server/src/services/typesafe-bench.ts +247 -0
  576. package/mcp-server/src/services/typesafe-config.ts +790 -0
  577. package/mcp-server/src/services/typesafe.ts +390 -0
  578. package/mcp-server/src/services/vector-cache.ts +255 -0
  579. package/mcp-server/src/services/whiteboard-geometry.ts +711 -0
  580. package/mcp-server/src/tools/agents.ts +539 -0
  581. package/mcp-server/src/tools/bluesky.ts +1186 -0
  582. package/mcp-server/src/tools/browser-advanced.ts +15 -6
  583. package/mcp-server/src/tools/browser-batch.ts +178 -0
  584. package/mcp-server/src/tools/browser-cheatsheet.ts +155 -0
  585. package/mcp-server/src/tools/browser-interact.ts +362 -255
  586. package/mcp-server/src/tools/browser-navigate.ts +164 -77
  587. package/mcp-server/src/tools/browser-observe.ts +2222 -1330
  588. package/mcp-server/src/tools/browser.ts +181 -107
  589. package/mcp-server/src/tools/card.ts +7 -5
  590. package/mcp-server/src/tools/choice.ts +103 -0
  591. package/mcp-server/src/tools/computer.ts +190 -0
  592. package/mcp-server/src/tools/discord.ts +10 -23
  593. package/mcp-server/src/tools/fb-groups.ts +387 -0
  594. package/mcp-server/src/tools/forget.ts +1 -1
  595. package/mcp-server/src/tools/git.ts +3 -1
  596. package/mcp-server/src/tools/gsc/experience.ts +440 -0
  597. package/mcp-server/src/tools/gsc/helpers.ts +288 -0
  598. package/mcp-server/src/tools/gsc/indexing.ts +495 -0
  599. package/mcp-server/src/tools/gsc/inspect.ts +391 -0
  600. package/mcp-server/src/tools/gsc/navigate.ts +236 -0
  601. package/mcp-server/src/tools/gsc/performance.ts +352 -0
  602. package/mcp-server/src/tools/gsc/settings.ts +564 -0
  603. package/mcp-server/src/tools/gsc.ts +95 -0
  604. package/mcp-server/src/tools/image.ts +3 -1
  605. package/mcp-server/src/tools/leonardo-browser-tools.ts +47 -37
  606. package/mcp-server/src/tools/leonardo.ts +7 -5
  607. package/mcp-server/src/tools/loop.ts +118 -25
  608. package/mcp-server/src/tools/memories.ts +65 -5
  609. package/mcp-server/src/tools/morelogin.ts +81 -0
  610. package/mcp-server/src/tools/profile.ts +122 -0
  611. package/mcp-server/src/tools/recall.ts +105 -261
  612. package/mcp-server/src/tools/reflect.ts +171 -145
  613. package/mcp-server/src/tools/remember.ts +223 -115
  614. package/mcp-server/src/tools/style-guide-tools.ts +250 -0
  615. package/mcp-server/src/tools/style-guide.ts +16 -0
  616. package/mcp-server/src/tools/sync.ts +66 -9
  617. package/mcp-server/src/tools/tictactoe.ts +3 -1
  618. package/mcp-server/src/tools/utils.ts +22 -0
  619. package/mcp-server/src/tools/whiteboard-format.ts +394 -0
  620. package/mcp-server/src/tools/whiteboard-tools.ts +191 -183
  621. package/mcp-server/src/tools/whiteboard.ts +7 -5
  622. package/mcp-server/src/tools/youtube/analytics.ts +106 -0
  623. package/mcp-server/src/tools/youtube/dedup.ts +57 -0
  624. package/mcp-server/src/tools/youtube/download.ts +41 -0
  625. package/mcp-server/src/tools/youtube/helpers.ts +183 -0
  626. package/mcp-server/src/tools/youtube/media.ts +109 -0
  627. package/mcp-server/src/tools/youtube/metadata.ts +112 -0
  628. package/mcp-server/src/tools/youtube/navigate.ts +81 -0
  629. package/mcp-server/src/tools/youtube/playlist.ts +134 -0
  630. package/mcp-server/src/tools/youtube/schedule.ts +158 -0
  631. package/mcp-server/src/tools/youtube/source.ts +101 -0
  632. package/mcp-server/src/tools/youtube/upload.ts +296 -0
  633. package/mcp-server/src/tools/youtube.ts +47 -0
  634. package/mcp-server/src/tui.ts +8 -9
  635. package/neural-interface/games/TicTacToe/1.svg +1 -0
  636. package/neural-interface/games/TicTacToe/2.svg +1 -0
  637. package/neural-interface/games/TicTacToe/3.svg +1 -0
  638. package/neural-interface/games/TicTacToe/4.svg +1 -0
  639. package/neural-interface/games/TicTacToe/5.svg +1 -0
  640. package/neural-interface/games/TicTacToe/6.svg +1 -0
  641. package/neural-interface/games/TicTacToe/7.svg +1 -0
  642. package/neural-interface/games/TicTacToe/8.svg +1 -0
  643. package/neural-interface/games/TicTacToe/9.svg +1 -0
  644. package/neural-interface/games/TicTacToe/Board.svg +1 -0
  645. package/neural-interface/games/TicTacToe/Circle.svg +1 -0
  646. package/neural-interface/games/TicTacToe/Cross.svg +1 -0
  647. package/neural-interface/i18n/en.json +6983 -0
  648. package/neural-interface/i18n/pt-BR.json +6987 -0
  649. package/neural-interface/lib/assistant-api.js +1005 -0
  650. package/neural-interface/lib/assistant-attachments.js +121 -0
  651. package/neural-interface/lib/assistant-brains/claude.js +207 -0
  652. package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +43 -0
  653. package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +56 -0
  654. package/neural-interface/lib/assistant-brains/codex.js +213 -0
  655. package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +47 -0
  656. package/neural-interface/lib/assistant-brains/opencode-route-gate.js +62 -0
  657. package/neural-interface/lib/assistant-brains/opencode.js +320 -0
  658. package/neural-interface/lib/assistant-budget.js +318 -0
  659. package/neural-interface/lib/assistant-catalog.js +731 -0
  660. package/neural-interface/lib/assistant-clarify.js +664 -0
  661. package/neural-interface/lib/assistant-config.js +232 -0
  662. package/neural-interface/lib/assistant-dispatch.js +2744 -0
  663. package/neural-interface/lib/assistant-envelope.js +579 -0
  664. package/neural-interface/lib/assistant-evidence.js +236 -0
  665. package/neural-interface/lib/assistant-hidden-models.js +272 -0
  666. package/neural-interface/lib/assistant-jev.js +117 -0
  667. package/neural-interface/lib/assistant-judgments.js +111 -0
  668. package/neural-interface/lib/assistant-media.js +335 -0
  669. package/neural-interface/lib/assistant-memory.js +398 -0
  670. package/neural-interface/lib/assistant-persona.js +444 -0
  671. package/neural-interface/lib/assistant-plan-permissions.js +448 -0
  672. package/neural-interface/lib/assistant-playbooks/design.md +87 -0
  673. package/neural-interface/lib/assistant-playbooks.js +72 -0
  674. package/neural-interface/lib/assistant-pricing.js +159 -0
  675. package/neural-interface/lib/assistant-route-gate-codex.js +163 -0
  676. package/neural-interface/lib/assistant-route-gate.js +212 -0
  677. package/neural-interface/lib/assistant-router.js +1324 -0
  678. package/neural-interface/lib/assistant-runtime.js +3337 -0
  679. package/neural-interface/lib/assistant-task-prompt.js +472 -0
  680. package/neural-interface/lib/assistant-usage.js +1688 -0
  681. package/neural-interface/lib/augmented-path.js +50 -0
  682. package/neural-interface/lib/automation-storage-migration.js +54 -0
  683. package/neural-interface/lib/backup-service.js +851 -0
  684. package/neural-interface/lib/backup-zip-reader.js +262 -0
  685. package/neural-interface/lib/browser-assist-api.js +41 -0
  686. package/neural-interface/lib/browser-console.js +176 -0
  687. package/neural-interface/lib/browser-execution.js +241 -0
  688. package/neural-interface/lib/browser-extraction.js +191 -0
  689. package/neural-interface/lib/browser-screenshot.js +399 -0
  690. package/neural-interface/lib/browser-semantic-context.js +639 -0
  691. package/neural-interface/lib/browser-snapshots.js +192 -0
  692. package/neural-interface/lib/browser-tab-recovery.js +119 -0
  693. package/neural-interface/lib/browser-targets.js +70 -0
  694. package/neural-interface/lib/browser-tool-policy.js +926 -0
  695. package/neural-interface/lib/claude-accounts.js +230 -0
  696. package/neural-interface/lib/claude-agent-bridge.js +3296 -0
  697. package/neural-interface/lib/claude-bypass-policy.js +99 -0
  698. package/neural-interface/lib/claude-history.js +429 -0
  699. package/neural-interface/lib/claude-model-catalog.js +483 -0
  700. package/neural-interface/lib/claude-panel-requests.js +165 -0
  701. package/neural-interface/lib/claude-panel-session.js +272 -0
  702. package/neural-interface/lib/claude-permission-rules.js +153 -0
  703. package/neural-interface/lib/claude-session-cleanup.js +71 -0
  704. package/neural-interface/lib/claude-session-list.js +82 -0
  705. package/neural-interface/lib/claude-session-ops.js +140 -0
  706. package/neural-interface/lib/claude-settings-view.js +51 -0
  707. package/neural-interface/lib/claude-skin-connect.js +79 -0
  708. package/neural-interface/lib/claude-stall-policy.js +7 -0
  709. package/neural-interface/lib/claude-temporary.js +435 -0
  710. package/neural-interface/lib/cli-update-planner.js +312 -0
  711. package/neural-interface/lib/codex-capabilities.d.ts +41 -0
  712. package/neural-interface/lib/codex-capabilities.js +148 -0
  713. package/neural-interface/lib/codex-collaboration-mode.js +17 -0
  714. package/neural-interface/lib/codex-compat-rpc.js +241 -0
  715. package/neural-interface/lib/codex-mcp-approvals.js +56 -0
  716. package/neural-interface/lib/codex-mcp-apps.js +47 -0
  717. package/neural-interface/lib/codex-model-context.js +202 -0
  718. package/neural-interface/lib/codex-plan-store.js +71 -0
  719. package/neural-interface/lib/codex-request-journal.js +242 -0
  720. package/neural-interface/lib/codex-runtime-path.js +213 -0
  721. package/neural-interface/lib/codex-session-catalog.js +231 -0
  722. package/neural-interface/lib/codex-session-settings.js +46 -0
  723. package/neural-interface/lib/codex-sidepanel-permissions.js +110 -0
  724. package/neural-interface/lib/codex-thread-history.js +165 -0
  725. package/neural-interface/lib/codex-user-verification.js +34 -0
  726. package/neural-interface/lib/codex-writer-lifecycle.js +152 -0
  727. package/neural-interface/lib/confined-fs.js +256 -0
  728. package/neural-interface/lib/db.js +922 -0
  729. package/neural-interface/lib/design-md.js +9 -0
  730. package/neural-interface/lib/desktop/api.js +92 -0
  731. package/neural-interface/lib/desktop/audit.js +62 -0
  732. package/neural-interface/lib/desktop/build.js +423 -0
  733. package/neural-interface/lib/desktop/config.js +606 -0
  734. package/neural-interface/lib/desktop/coords.js +76 -0
  735. package/neural-interface/lib/desktop/fake-helper.js +1192 -0
  736. package/neural-interface/lib/desktop/frames.js +77 -0
  737. package/neural-interface/lib/desktop/grants.js +84 -0
  738. package/neural-interface/lib/desktop/guards.js +170 -0
  739. package/neural-interface/lib/desktop/helper/SynabunDesktop.swift +3056 -0
  740. package/neural-interface/lib/desktop/lease.js +51 -0
  741. package/neural-interface/lib/desktop/manager.js +545 -0
  742. package/neural-interface/lib/desktop/press-contexts.js +103 -0
  743. package/neural-interface/lib/desktop/protocol.js +495 -0
  744. package/neural-interface/lib/desktop/service.js +1202 -0
  745. package/neural-interface/lib/effort-levels.js +148 -0
  746. package/neural-interface/lib/event-loop-monitor.js +67 -0
  747. package/neural-interface/lib/exec-loop-command.js +209 -0
  748. package/neural-interface/lib/folder-picker.ps1 +77 -0
  749. package/neural-interface/lib/http-guards.js +287 -0
  750. package/neural-interface/lib/jsonl-lines.js +94 -0
  751. package/neural-interface/lib/loop-logger.js +127 -0
  752. package/neural-interface/lib/mcp-client-config.js +133 -0
  753. package/neural-interface/lib/mcp-installer.js +487 -0
  754. package/neural-interface/lib/mcp-profile-refresh-coordinator.js +78 -0
  755. package/neural-interface/lib/mcp-profile-servers.js +120 -0
  756. package/neural-interface/lib/memo-cache.js +84 -0
  757. package/neural-interface/lib/memory-api.js +758 -0
  758. package/neural-interface/lib/memory-map-api.js +1150 -0
  759. package/neural-interface/lib/memory-map-layout.js +872 -0
  760. package/neural-interface/lib/memory-map-worker.js +165 -0
  761. package/neural-interface/lib/memory-session-capture.js +81 -0
  762. package/neural-interface/lib/memory-timers.js +62 -0
  763. package/neural-interface/lib/morelogin.js +301 -0
  764. package/neural-interface/lib/native-binary-runtime.js +650 -0
  765. package/neural-interface/lib/native-loop-goal.js +33 -0
  766. package/neural-interface/lib/native-loop-providers.js +1016 -0
  767. package/neural-interface/lib/native-loop-runtime.js +747 -0
  768. package/neural-interface/lib/opencode-hidden-models.js +113 -0
  769. package/neural-interface/lib/opencode-history.js +253 -0
  770. package/neural-interface/lib/opencode-runtime-config.js +58 -0
  771. package/neural-interface/lib/opencode-v2-client.js +486 -0
  772. package/neural-interface/lib/opencode-v2-ws-requests.js +955 -0
  773. package/neural-interface/lib/path-confine.js +213 -0
  774. package/neural-interface/lib/plugin-installer.js +264 -0
  775. package/neural-interface/lib/project-storage.js +766 -0
  776. package/neural-interface/lib/pty-host/core.js +603 -0
  777. package/neural-interface/lib/pty-host/flow.js +43 -0
  778. package/neural-interface/lib/pty-host/host.js +47 -0
  779. package/neural-interface/lib/pty-host/manager.js +360 -0
  780. package/neural-interface/lib/pty-host/protocol.js +81 -0
  781. package/neural-interface/lib/pty-host/snapshot.js +133 -0
  782. package/neural-interface/lib/remote-policy.js +582 -0
  783. package/neural-interface/lib/rulesets/api.js +175 -0
  784. package/neural-interface/lib/rulesets/fs-safe.js +245 -0
  785. package/neural-interface/lib/rulesets/installer.js +1453 -0
  786. package/neural-interface/lib/rulesets/json-edit.js +186 -0
  787. package/neural-interface/lib/rulesets/lock.js +170 -0
  788. package/neural-interface/lib/rulesets/managed-text.js +314 -0
  789. package/neural-interface/lib/rulesets/normalise.js +24 -0
  790. package/neural-interface/lib/rulesets/render.js +84 -0
  791. package/neural-interface/lib/schedule-launch-intent.js +40 -0
  792. package/neural-interface/lib/session-cache-builder.js +524 -0
  793. package/neural-interface/lib/session-chunker.js +344 -0
  794. package/neural-interface/lib/session-indexer.js +327 -0
  795. package/neural-interface/lib/session-title-generator.js +227 -0
  796. package/neural-interface/lib/skill-prompt-bridge.js +11 -0
  797. package/neural-interface/lib/style-guide/api.js +375 -0
  798. package/neural-interface/lib/style-guide/color.js +352 -0
  799. package/neural-interface/lib/style-guide/export-css.js +99 -0
  800. package/neural-interface/lib/style-guide/export-dtcg.js +209 -0
  801. package/neural-interface/lib/style-guide/export-tailwind.js +102 -0
  802. package/neural-interface/lib/style-guide/fonts.json +227 -0
  803. package/neural-interface/lib/style-guide/import.js +1268 -0
  804. package/neural-interface/lib/style-guide/pointers.js +103 -0
  805. package/neural-interface/lib/style-guide/presets.js +232 -0
  806. package/neural-interface/lib/style-guide/render-design-md.js +319 -0
  807. package/neural-interface/lib/style-guide/schema.js +848 -0
  808. package/neural-interface/lib/style-guide/security.js +43 -0
  809. package/neural-interface/lib/style-guide/store.js +491 -0
  810. package/neural-interface/lib/style-guide/summary.js +106 -0
  811. package/neural-interface/lib/style-guide/tokens.js +170 -0
  812. package/neural-interface/lib/synabun-update-plan.js +305 -0
  813. package/neural-interface/lib/synabun-version.js +179 -0
  814. package/neural-interface/lib/system-restore.js +99 -0
  815. package/neural-interface/lib/terminal-env.js +86 -0
  816. package/neural-interface/lib/ui-blob-store.js +106 -0
  817. package/neural-interface/lib/vector-cache.js +2 -0
  818. package/neural-interface/lib/virtual-socket.js +60 -0
  819. package/neural-interface/lib/whatsapp/api.js +146 -0
  820. package/neural-interface/lib/whatsapp/auth-store.js +389 -0
  821. package/neural-interface/lib/whatsapp/baileys-adapter.js +457 -0
  822. package/neural-interface/lib/whatsapp/brain.js +128 -0
  823. package/neural-interface/lib/whatsapp/bridge.js +1499 -0
  824. package/neural-interface/lib/whatsapp/cards.js +519 -0
  825. package/neural-interface/lib/whatsapp/commands.js +92 -0
  826. package/neural-interface/lib/whatsapp/config.js +291 -0
  827. package/neural-interface/lib/whatsapp/connector/entry.mjs +25 -0
  828. package/neural-interface/lib/whatsapp/connector/manifest.json +6 -0
  829. package/neural-interface/lib/whatsapp/connector/npm-shrinkwrap.json +717 -0
  830. package/neural-interface/lib/whatsapp/connector/package.json +8 -0
  831. package/neural-interface/lib/whatsapp/fake-baileys.js +444 -0
  832. package/neural-interface/lib/whatsapp/format.js +552 -0
  833. package/neural-interface/lib/whatsapp/host-core.js +1225 -0
  834. package/neural-interface/lib/whatsapp/host.js +119 -0
  835. package/neural-interface/lib/whatsapp/identity.js +288 -0
  836. package/neural-interface/lib/whatsapp/inbound.js +149 -0
  837. package/neural-interface/lib/whatsapp/installer.js +562 -0
  838. package/neural-interface/lib/whatsapp/manager.js +638 -0
  839. package/neural-interface/lib/whatsapp/paths.js +81 -0
  840. package/neural-interface/lib/whatsapp/protocol.js +327 -0
  841. package/neural-interface/lib/whatsapp/qr-svg.js +57 -0
  842. package/neural-interface/lib/whatsapp/redact.js +130 -0
  843. package/neural-interface/lib/whatsapp/service.js +1305 -0
  844. package/neural-interface/lib/whatsapp/vendor/qrcodegen.js +848 -0
  845. package/neural-interface/package-lock.json +4682 -0
  846. package/neural-interface/package.json +58 -27
  847. package/neural-interface/public/apple-touch-icon.png +0 -0
  848. package/neural-interface/public/category-logos/synabun.png +0 -0
  849. package/neural-interface/public/claude.svg +1 -0
  850. package/neural-interface/public/favicon-16x16.png +0 -0
  851. package/neural-interface/public/favicon-32x32.png +0 -0
  852. package/neural-interface/public/icon-192.png +0 -0
  853. package/neural-interface/public/icon-512.png +0 -0
  854. package/neural-interface/public/index.html +32 -182
  855. package/neural-interface/public/index2d.html +2 -2
  856. package/neural-interface/public/logo-synabun.png +0 -0
  857. package/neural-interface/public/logoHD.png +0 -0
  858. package/neural-interface/public/mcp.svg +4 -0
  859. package/neural-interface/public/offline.html +335 -299
  860. package/neural-interface/public/onboarding.html +692 -155
  861. package/neural-interface/public/opencode-logo-dark-square.svg +1 -0
  862. package/neural-interface/public/shared/agent-runtime-options.js +596 -0
  863. package/neural-interface/public/shared/api.js +339 -28
  864. package/neural-interface/public/shared/assistant/asst-accounts.js +318 -0
  865. package/neural-interface/public/shared/assistant/asst-agents-dock.js +296 -0
  866. package/neural-interface/public/shared/assistant/asst-api.js +270 -0
  867. package/neural-interface/public/shared/assistant/asst-brain-picker.js +744 -0
  868. package/neural-interface/public/shared/assistant/asst-budget.js +333 -0
  869. package/neural-interface/public/shared/assistant/asst-composer.js +656 -0
  870. package/neural-interface/public/shared/assistant/asst-computer.js +803 -0
  871. package/neural-interface/public/shared/assistant/asst-control.js +1018 -0
  872. package/neural-interface/public/shared/assistant/asst-hosts.js +262 -0
  873. package/neural-interface/public/shared/assistant/asst-mascot.js +311 -0
  874. package/neural-interface/public/shared/assistant/asst-menu.js +375 -0
  875. package/neural-interface/public/shared/assistant/asst-panel.js +1845 -0
  876. package/neural-interface/public/shared/assistant/asst-rack-styles.js +589 -0
  877. package/neural-interface/public/shared/assistant/asst-render.js +3296 -0
  878. package/neural-interface/public/shared/assistant/asst-route.js +1653 -0
  879. package/neural-interface/public/shared/assistant/asst-roving.js +75 -0
  880. package/neural-interface/public/shared/assistant/asst-sanitize.js +117 -0
  881. package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +488 -0
  882. package/neural-interface/public/shared/assistant/asst-sidepanel.js +675 -0
  883. package/neural-interface/public/shared/assistant/asst-slash.js +258 -0
  884. package/neural-interface/public/shared/assistant/asst-state.js +727 -0
  885. package/neural-interface/public/shared/assistant/asst-styles.js +1684 -0
  886. package/neural-interface/public/shared/assistant/asst-tool-kinds.js +1017 -0
  887. package/neural-interface/public/shared/assistant/asst-usage.js +444 -0
  888. package/neural-interface/public/shared/assistant/asst-ws.js +175 -0
  889. package/neural-interface/public/shared/automation-context.js +75 -0
  890. package/neural-interface/public/shared/blob-store.js +99 -0
  891. package/neural-interface/public/shared/cdx/cdx-capabilities.js +118 -0
  892. package/neural-interface/public/shared/cdx/cdx-cards.js +37 -0
  893. package/neural-interface/public/shared/cdx/cdx-commands.js +171 -0
  894. package/neural-interface/public/shared/cdx/cdx-context-menu.js +402 -0
  895. package/neural-interface/public/shared/cdx/cdx-context-model.js +220 -0
  896. package/neural-interface/public/shared/cdx/cdx-features.js +408 -0
  897. package/neural-interface/public/shared/cdx/cdx-icons.js +89 -0
  898. package/neural-interface/public/shared/cdx/cdx-mcp-app-host.js +414 -0
  899. package/neural-interface/public/shared/cdx/cdx-mcp-app-proxy.html +6 -0
  900. package/neural-interface/public/shared/cdx/cdx-mcp-app-proxy.js +56 -0
  901. package/neural-interface/public/shared/cdx/cdx-mcp-app.js +178 -0
  902. package/neural-interface/public/shared/cdx/cdx-model-catalog.js +120 -0
  903. package/neural-interface/public/shared/cdx/cdx-output-model.js +261 -0
  904. package/neural-interface/public/shared/cdx/cdx-output.js +382 -0
  905. package/neural-interface/public/shared/cdx/cdx-panel.js +1372 -0
  906. package/neural-interface/public/shared/cdx/cdx-plan.js +266 -0
  907. package/neural-interface/public/shared/cdx/cdx-protocol.js +682 -0
  908. package/neural-interface/public/shared/cdx/cdx-render.js +3381 -0
  909. package/neural-interface/public/shared/cdx/cdx-requests.js +1136 -0
  910. package/neural-interface/public/shared/cdx/cdx-styles.js +3251 -0
  911. package/neural-interface/public/shared/cdx/cdx-tabs.js +7992 -0
  912. package/neural-interface/public/shared/cdx/cdx-ws.js +363 -0
  913. package/neural-interface/public/shared/cli-status.js +169 -0
  914. package/neural-interface/public/shared/constants.js +22 -5
  915. package/neural-interface/public/shared/cp/cp-agents.js +186 -0
  916. package/neural-interface/public/shared/cp/cp-bash.js +252 -0
  917. package/neural-interface/public/shared/cp/cp-compose.js +159 -0
  918. package/neural-interface/public/shared/cp/cp-context-menu.js +309 -0
  919. package/neural-interface/public/shared/cp/cp-context-model.js +157 -0
  920. package/neural-interface/public/shared/cp/cp-context-window.js +80 -0
  921. package/neural-interface/public/shared/cp/cp-ctx.js +11 -0
  922. package/neural-interface/public/shared/cp/cp-diff.js +255 -0
  923. package/neural-interface/public/shared/cp/cp-event-rows.js +637 -0
  924. package/neural-interface/public/shared/cp/cp-events.js +846 -0
  925. package/neural-interface/public/shared/cp/cp-markdown.js +104 -0
  926. package/neural-interface/public/shared/cp/cp-permission-model.js +905 -0
  927. package/neural-interface/public/shared/cp/cp-permissions.js +626 -0
  928. package/neural-interface/public/shared/cp/cp-rehydrate.js +113 -0
  929. package/neural-interface/public/shared/cp/cp-restore.js +224 -0
  930. package/neural-interface/public/shared/cp/cp-session-model.js +338 -0
  931. package/neural-interface/public/shared/cp/cp-session-settings.js +254 -0
  932. package/neural-interface/public/shared/cp/cp-sessions.js +227 -0
  933. package/neural-interface/public/shared/cp/cp-statusline.js +153 -0
  934. package/neural-interface/public/shared/cp/cp-styles.js +349 -0
  935. package/neural-interface/public/shared/cp/cp-tasks-model.js +282 -0
  936. package/neural-interface/public/shared/cp/cp-tasks.js +107 -0
  937. package/neural-interface/public/shared/cp/cp-temporary-view.js +56 -0
  938. package/neural-interface/public/shared/cp/cp-temporary.js +231 -0
  939. package/neural-interface/public/shared/cp/cp-tool-cards.js +326 -0
  940. package/neural-interface/public/shared/cp/cp-tool-results.js +618 -0
  941. package/neural-interface/public/shared/cp/cp-usage-model.js +124 -0
  942. package/neural-interface/public/shared/graph-activity.js +68 -0
  943. package/neural-interface/public/shared/html-shell.js +107 -12
  944. package/neural-interface/public/shared/i18n.js +132 -34
  945. package/neural-interface/public/shared/node-positions-store.js +44 -0
  946. package/neural-interface/public/shared/ocp-hidden-models.js +116 -0
  947. package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +355 -0
  948. package/neural-interface/public/shared/ocp-v2/ocp-v2-autoaccept-button.js +35 -0
  949. package/neural-interface/public/shared/ocp-v2/ocp-v2-automation-ownership.js +72 -0
  950. package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +280 -0
  951. package/neural-interface/public/shared/ocp-v2/ocp-v2-caps.js +67 -0
  952. package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +179 -0
  953. package/neural-interface/public/shared/ocp-v2/ocp-v2-changes.js +164 -0
  954. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +725 -0
  955. package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +75 -0
  956. package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +1204 -0
  957. package/neural-interface/public/shared/ocp-v2/ocp-v2-confirm-logic.js +117 -0
  958. package/neural-interface/public/shared/ocp-v2/ocp-v2-confirm.js +59 -0
  959. package/neural-interface/public/shared/ocp-v2/ocp-v2-context-gauge.js +252 -0
  960. package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +478 -0
  961. package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +179 -0
  962. package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +233 -0
  963. package/neural-interface/public/shared/ocp-v2/ocp-v2-icons.js +30 -0
  964. package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +1065 -0
  965. package/neural-interface/public/shared/ocp-v2/ocp-v2-mention-hints.js +182 -0
  966. package/neural-interface/public/shared/ocp-v2/ocp-v2-modelpicker.js +655 -0
  967. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +2636 -0
  968. package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +601 -0
  969. package/neural-interface/public/shared/ocp-v2/ocp-v2-profile-inheritance.js +78 -0
  970. package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +649 -0
  971. package/neural-interface/public/shared/ocp-v2/ocp-v2-providers.js +35 -0
  972. package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +357 -0
  973. package/neural-interface/public/shared/ocp-v2/ocp-v2-render-logic.js +189 -0
  974. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +1869 -0
  975. package/neural-interface/public/shared/ocp-v2/ocp-v2-select.js +42 -0
  976. package/neural-interface/public/shared/ocp-v2/ocp-v2-send-logic.js +117 -0
  977. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +1714 -0
  978. package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +468 -0
  979. package/neural-interface/public/shared/ocp-v2/ocp-v2-session-widgets.js +63 -0
  980. package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +366 -0
  981. package/neural-interface/public/shared/ocp-v2/ocp-v2-settings-link.js +19 -0
  982. package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +343 -0
  983. package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +746 -0
  984. package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +347 -0
  985. package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +338 -0
  986. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +3543 -0
  987. package/neural-interface/public/shared/ocp-v2/ocp-v2-subagents-logic.js +482 -0
  988. package/neural-interface/public/shared/ocp-v2/ocp-v2-tools-logic.js +351 -0
  989. package/neural-interface/public/shared/ocp-v2/ocp-v2-tools.js +168 -0
  990. package/neural-interface/public/shared/ocp-v2/ocp-v2-variantpicker.js +315 -0
  991. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +545 -0
  992. package/neural-interface/public/shared/provider-icons.js +30 -0
  993. package/neural-interface/public/shared/session-title.js +100 -0
  994. package/neural-interface/public/shared/settings/settings-ia.js +389 -0
  995. package/neural-interface/public/shared/settings/settings-kit.js +234 -0
  996. package/neural-interface/public/shared/settings/settings-search.js +463 -0
  997. package/neural-interface/public/shared/settings/settings-shell.js +570 -0
  998. package/neural-interface/public/shared/state.js +5 -0
  999. package/neural-interface/public/shared/storage.js +50 -7
  1000. package/neural-interface/public/shared/styleguide/sg-agents.js +42 -0
  1001. package/neural-interface/public/shared/styleguide/sg-brand.js +4 -0
  1002. package/neural-interface/public/shared/styleguide/sg-color-client.js +388 -0
  1003. package/neural-interface/public/shared/styleguide/sg-colors.js +148 -0
  1004. package/neural-interface/public/shared/styleguide/sg-components.js +35 -0
  1005. package/neural-interface/public/shared/styleguide/sg-history.js +41 -0
  1006. package/neural-interface/public/shared/styleguide/sg-icons-logo.js +38 -0
  1007. package/neural-interface/public/shared/styleguide/sg-imagery.js +4 -0
  1008. package/neural-interface/public/shared/styleguide/sg-import-export.js +47 -0
  1009. package/neural-interface/public/shared/styleguide/sg-kit.js +281 -0
  1010. package/neural-interface/public/shared/styleguide/sg-labels.js +318 -0
  1011. package/neural-interface/public/shared/styleguide/sg-layout.js +4 -0
  1012. package/neural-interface/public/shared/styleguide/sg-motion.js +5 -0
  1013. package/neural-interface/public/shared/styleguide/sg-panel.js +229 -0
  1014. package/neural-interface/public/shared/styleguide/sg-preview.js +138 -0
  1015. package/neural-interface/public/shared/styleguide/sg-rules.js +9 -0
  1016. package/neural-interface/public/shared/styleguide/sg-shape.js +24 -0
  1017. package/neural-interface/public/shared/styleguide/sg-state.js +132 -0
  1018. package/neural-interface/public/shared/styleguide/sg-typography.js +124 -0
  1019. package/neural-interface/public/shared/styles.css +7883 -1155
  1020. package/neural-interface/public/shared/synabun-mascot.js +1625 -0
  1021. package/neural-interface/public/shared/synabun-ticker.js +376 -0
  1022. package/neural-interface/public/shared/term-renderer.js +343 -0
  1023. package/neural-interface/public/shared/ui-assistant-panel.js +10 -0
  1024. package/neural-interface/public/shared/ui-assistant.js +77 -0
  1025. package/neural-interface/public/shared/ui-automation-studio.js +5105 -3573
  1026. package/neural-interface/public/shared/ui-claude-panel.js +11685 -6333
  1027. package/neural-interface/public/shared/ui-codex-panel.js +12 -0
  1028. package/neural-interface/public/shared/ui-cost-widget.js +55 -34
  1029. package/neural-interface/public/shared/ui-detail.js +77 -14
  1030. package/neural-interface/public/shared/ui-explorer.js +360 -181
  1031. package/neural-interface/public/shared/ui-file-explorer.js +485 -107
  1032. package/neural-interface/public/shared/ui-help.js +2 -2
  1033. package/neural-interface/public/shared/ui-image-gallery.js +45 -21
  1034. package/neural-interface/public/shared/ui-judgments.js +1346 -0
  1035. package/neural-interface/public/shared/ui-keybinds.js +3 -2
  1036. package/neural-interface/public/shared/ui-link.js +105 -51
  1037. package/neural-interface/public/shared/ui-loading.js +4 -4
  1038. package/neural-interface/public/shared/ui-memory-maintenance.js +111 -0
  1039. package/neural-interface/public/shared/ui-menubar.js +89 -4
  1040. package/neural-interface/public/shared/ui-native-loop-router-state.js +94 -0
  1041. package/neural-interface/public/shared/ui-native-loop-router.js +493 -0
  1042. package/neural-interface/public/shared/ui-native-window-id.js +7 -0
  1043. package/neural-interface/public/shared/ui-navbar.js +357 -222
  1044. package/neural-interface/public/shared/ui-notifications.js +58 -12
  1045. package/neural-interface/public/shared/ui-opencode-panel-v2.js +17 -0
  1046. package/neural-interface/public/shared/ui-panels.js +15 -7
  1047. package/neural-interface/public/shared/ui-resume.js +823 -653
  1048. package/neural-interface/public/shared/ui-schedule-queue.js +172 -0
  1049. package/neural-interface/public/shared/ui-schedules-studio.js +1882 -0
  1050. package/neural-interface/public/shared/ui-scroll-follow.js +194 -0
  1051. package/neural-interface/public/shared/ui-sessions.js +789 -34
  1052. package/neural-interface/public/shared/ui-settings.js +5793 -2190
  1053. package/neural-interface/public/shared/ui-sidepanel-layout.js +109 -0
  1054. package/neural-interface/public/shared/ui-sidepanel-runtime.js +19 -0
  1055. package/neural-interface/public/shared/ui-sidepanel-session-entry.js +40 -0
  1056. package/neural-interface/public/shared/ui-sidepanel-sessions.js +221 -0
  1057. package/neural-interface/public/shared/ui-sidepanel-state.js +131 -0
  1058. package/neural-interface/public/shared/ui-sidepanel-tray.js +547 -0
  1059. package/neural-interface/public/shared/ui-sidepanel-windows.js +387 -0
  1060. package/neural-interface/public/shared/ui-skills.js +18 -32
  1061. package/neural-interface/public/shared/ui-styleguide.js +35 -0
  1062. package/neural-interface/public/shared/ui-sync.js +87 -0
  1063. package/neural-interface/public/shared/ui-terminal.js +7877 -6385
  1064. package/neural-interface/public/shared/ui-tool-updates.js +292 -0
  1065. package/neural-interface/public/shared/ui-tooltip.js +156 -15
  1066. package/neural-interface/public/shared/ui-tutorial-draw.js +119 -683
  1067. package/neural-interface/public/shared/ui-tutorial-layout.js +135 -0
  1068. package/neural-interface/public/shared/ui-tutorial-steps.js +59 -2209
  1069. package/neural-interface/public/shared/ui-tutorial.css +102 -0
  1070. package/neural-interface/public/shared/ui-tutorial.js +557 -1076
  1071. package/neural-interface/public/shared/ui-update.js +420 -68
  1072. package/neural-interface/public/shared/ui-whatsapp.js +941 -0
  1073. package/neural-interface/public/shared/ui-whiteboard.js +1076 -233
  1074. package/neural-interface/public/shared/ui-workspaces.js +2 -1
  1075. package/neural-interface/public/shared/utils.js +58 -0
  1076. package/neural-interface/public/shared/vterm-buffer.js +15 -5
  1077. package/neural-interface/public/shared/whatsapp/wa-phone.js +65 -0
  1078. package/neural-interface/public/shared/whatsapp/wa-view.js +411 -0
  1079. package/neural-interface/public/sidepanel-session.html +18 -0
  1080. package/neural-interface/public/sw.js +8 -2
  1081. package/neural-interface/public/synabun.png +0 -0
  1082. package/neural-interface/public/variant/2d/graph.js +1707 -1635
  1083. package/neural-interface/public/variant/2d/lasso.js +2 -1
  1084. package/neural-interface/public/variant/2d/layout.js +595 -594
  1085. package/neural-interface/public/variant/2d/main.js +556 -521
  1086. package/neural-interface/public/variant/2d/settings-gfx.js +18 -24
  1087. package/neural-interface/public/variant/3d/main.js +516 -500
  1088. package/neural-interface/public/variant/3d/map-controls.js +144 -0
  1089. package/neural-interface/public/variant/3d/map-data.js +251 -0
  1090. package/neural-interface/public/variant/3d/map-labels.js +241 -0
  1091. package/neural-interface/public/variant/3d/map-pick.js +90 -0
  1092. package/neural-interface/public/variant/3d/map-renderer.js +521 -0
  1093. package/neural-interface/public/variant/3d/map-shaders.js +158 -0
  1094. package/neural-interface/public/variant/3d/map-view.js +618 -0
  1095. package/neural-interface/public/vendor/three/manifest.json +3 -0
  1096. package/neural-interface/public/vendor/three/three-0.169.0.min.js +3844 -0
  1097. package/neural-interface/public/vendor/xterm/manifest.json +3 -0
  1098. package/neural-interface/public/vendor/xterm/xterm-6.0.0.css +285 -0
  1099. package/neural-interface/public/vendor/xterm/xterm-6.0.0.min.js +192 -0
  1100. package/neural-interface/scripts/build-vendor.mjs +64 -0
  1101. package/neural-interface/scripts/codex-protocol-fixture.mjs +83 -0
  1102. package/neural-interface/scripts/rebuild-pty.js +37 -23
  1103. package/neural-interface/scripts/vendor-three-entry.js +24 -0
  1104. package/neural-interface/scripts/vendor-xterm-entry.js +8 -0
  1105. package/neural-interface/server.js +33948 -15000
  1106. package/neural-interface/skins/default/skin.css +90 -0
  1107. package/neural-interface/skins/default/skin.json +8 -0
  1108. package/neural-interface/templates/rulesets/README.md +9 -0
  1109. package/neural-interface/templates/rulesets/claude.md +3 -0
  1110. package/neural-interface/templates/rulesets/codex.md +2 -0
  1111. package/neural-interface/templates/rulesets/coexistence.md +6 -0
  1112. package/neural-interface/templates/rulesets/core.md +26 -0
  1113. package/neural-interface/templates/rulesets/cursor.md +2 -0
  1114. package/neural-interface/templates/rulesets/gemini.md +2 -0
  1115. package/neural-interface/templates/rulesets/legacy-hashes.json +227 -0
  1116. package/neural-interface/templates/rulesets/manifest.json +12 -0
  1117. package/neural-interface/templates/rulesets/opencode.md +2 -0
  1118. package/package.json +119 -53
  1119. package/postinstall.js +125 -26
  1120. package/preuninstall.js +187 -0
  1121. package/scripts/audit-claude-hook-usage.mjs +12 -0
  1122. package/scripts/audit-memory-duplicates.mjs +44 -0
  1123. package/scripts/measure-claude-hook-overhead.mjs +77 -0
  1124. package/scripts/recover-user-config.mjs +254 -0
  1125. package/scripts/restore-data-home-from-backup.mjs +239 -0
  1126. package/setup.js +804 -260
  1127. package/skills/leonardo/SKILL.md +19 -10
  1128. package/skills/leonardo/modules/image-prompter.md +18 -12
  1129. package/skills/leonardo/modules/video-prompter.md +19 -13
  1130. package/skills/synabun/SKILL.md +209 -185
  1131. package/skills/synabun/icon.png +0 -0
  1132. package/skills/synabun/modules/audit.md +380 -374
  1133. package/skills/synabun/modules/changelog.md +15 -6
  1134. package/skills/synabun/modules/idea.md +148 -144
  1135. package/skills/synabun/modules/memorize.md +13 -4
  1136. package/skills/synabun/modules/schedule.md +198 -0
  1137. package/skills/synabun/synabunicon.png +0 -0
  1138. package/updater.cmd +31 -0
  1139. package/updater.mjs +382 -0
  1140. package/updater.sh +29 -0
  1141. package/hooks/claude-code/test-user-learning.mjs +0 -531
  1142. package/neural-interface/public/claude-chat.css +0 -878
  1143. package/neural-interface/public/claude-chat.html +0 -92
  1144. package/neural-interface/public/claude-chat.js +0 -1168
  1145. package/neural-interface/public/index-legacy.html +0 -14677
  1146. package/neural-interface/public/index2d-legacy.html +0 -8193
  1147. package/neural-interface/public/shared/html-term-renderer.js +0 -1022
  1148. package/neural-interface/public/variant/3d/background.js +0 -884
  1149. package/neural-interface/public/variant/3d/camera.js +0 -661
  1150. package/neural-interface/public/variant/3d/gfx.js +0 -116
  1151. package/neural-interface/public/variant/3d/graph.js +0 -2399
  1152. package/neural-interface/public/variant/3d/settings-gfx.js +0 -228
  1153. package/neural-interface/templates/CLAUDE-template.md +0 -211
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Deterministic risk of acting on a page element, the URL sanitizer, and the
3
+ * target fingerprint.
4
+ *
5
+ * Pure: no DOM, no sqlite, no TypeSafe client. The Neural Interface imports
6
+ * the compiled copy to classify what its collector found, the MCP layer uses
7
+ * it to veto intents, and the browser benchmark runs fixtures through it, so
8
+ * "is this safe to click again" has one definition everywhere.
9
+ *
10
+ * `navigation` is an allow-list verdict. An element earns it only by passing
11
+ * every clause below; anything not positively recognised is `unknown`, and
12
+ * only `navigation` may ever be auto-healed. Jev never sees this module's
13
+ * inputs and cannot influence its output: no page text can talk an element
14
+ * into eligibility.
15
+ */
16
+ export type TargetRisk = 'navigation' | 'form' | 'write' | 'publish' | 'payment' | 'destructive' | 'authentication' | 'file' | 'unknown';
17
+ /**
18
+ * What the in-page collector reports about one element. Travels page → Neural
19
+ * Interface (Node) and stops there: it holds raw hrefs and every name source,
20
+ * so it is NEVER serialized to the MCP layer, to Jev, or to a log.
21
+ */
22
+ export interface RawTargetFacts {
23
+ tag: string;
24
+ role: string | null;
25
+ inputType: string | null;
26
+ editable: boolean;
27
+ containsEditable: boolean;
28
+ insideForm: boolean;
29
+ isSubmit: boolean;
30
+ disabled: boolean;
31
+ /** aria-pressed / aria-checked / aria-expanded, or a checkbox, radio or switch. */
32
+ toggles: boolean;
33
+ hasPopup: boolean;
34
+ download: boolean;
35
+ ping: boolean;
36
+ target: string;
37
+ /** The document has a <base target> other than _self. */
38
+ baseTarget: boolean;
39
+ /** Names of the write-ish attributes found on the element, from HANDLER_ATTRS. */
40
+ handlerAttrs: string[];
41
+ hrefAttr: string | null;
42
+ hrefRaw: string | null;
43
+ names: {
44
+ aria: string;
45
+ labelledby: string;
46
+ label: string;
47
+ text: string;
48
+ alt: string;
49
+ title: string;
50
+ placeholder: string;
51
+ };
52
+ /** Primary language subtag of the document, lowercased; '' when the page declares none. */
53
+ lang: string;
54
+ inDraftZone: boolean;
55
+ engagement: boolean;
56
+ /** The element is, or wraps, a password / one-time-code / credential field. */
57
+ credentialField: boolean;
58
+ }
59
+ /**
60
+ * Neural Interface → MCP. `selector` / `nth` are for showing the agent how to
61
+ * retry, exactly as legacy hints do; they are never sent to Jev and never used
62
+ * by a heal (the server keeps its own copy in the heal context). Fingerprints
63
+ * stay on the server.
64
+ */
65
+ export interface AssistCandidate {
66
+ id: string;
67
+ hintIndex: number | null;
68
+ selector?: string;
69
+ nth?: number;
70
+ role: string;
71
+ kind: 'link' | 'button' | 'field' | 'toggle' | 'other';
72
+ inputType?: string;
73
+ name: string;
74
+ group?: string;
75
+ hrefPath?: string;
76
+ disabled: boolean;
77
+ inDialog: boolean;
78
+ risk: TargetRisk;
79
+ healable: boolean;
80
+ }
81
+ /** Attributes that make an anchor a write, whatever its href says. The collector probes exactly these. */
82
+ export declare const HANDLER_ATTRS: readonly ["onclick", "onmousedown", "onmouseup", "onpointerdown", "onpointerup", "data-method", "data-turbo-method", "data-remote", "data-confirm", "data-turbo-confirm", "data-action", "hx-post", "hx-put", "hx-patch", "hx-delete", "formaction", "wire:click", "x-on:click", "@click", "v-on:click", "ng-click"];
83
+ /** Query keys that page through or filter a view. Any other key makes a link's effect unknowable. */
84
+ export declare const BENIGN_QUERY_KEYS: Set<string>;
85
+ /** Languages the lexicons below cover. A page in any other language cannot be classified `navigation`. */
86
+ export declare const LEXICON_LANGS: Set<string>;
87
+ /** NFKC, zero-width and bidi controls removed, whitespace collapsed, lowercased. Used for display-independent comparison. */
88
+ export declare function normalizeName(value: unknown): string;
89
+ export declare const PAYMENT_RE: RegExp;
90
+ export declare const AUTH_RE: RegExp;
91
+ export declare const FILE_RE: RegExp;
92
+ export declare const PUBLISH_RE: RegExp;
93
+ export declare const DESTRUCTIVE_RE: RegExp;
94
+ export declare const WRITE_RE: RegExp;
95
+ /** Anything that is not plain navigation. */
96
+ export declare const DANGER_RE: RegExp;
97
+ /** Does this text name something other than plain navigation? Used for labels, intents and selectors alike. */
98
+ export declare function lexiconClass(text: string): Exclude<TargetRisk, 'navigation' | 'form' | 'unknown'> | null;
99
+ /** Long opaque strings: session ids, magic-link tokens, JWT heads. */
100
+ export declare function isTokenLike(value: string): boolean;
101
+ export interface SanitizedUrl {
102
+ scheme: string;
103
+ origin: string;
104
+ path: string;
105
+ }
106
+ /**
107
+ * What may leave the machine about a URL: scheme, host and a redacted path.
108
+ * Never userinfo, query, fragment or matrix parameters. Non-http(s) schemes
109
+ * keep only the scheme: file:, data: and blob: carry paths or content.
110
+ */
111
+ export declare function sanitizeUrl(raw: unknown, base?: string): SanitizedUrl;
112
+ /** The name a person would read, in accessible-name priority order. */
113
+ export declare function bestName(facts: Pick<RawTargetFacts, 'names'>): string;
114
+ export declare function candidateKind(facts: Pick<RawTargetFacts, 'tag' | 'role' | 'editable' | 'toggles' | 'inputType'>): AssistCandidate['kind'];
115
+ export interface RiskContext {
116
+ pageUrl: string;
117
+ }
118
+ export interface RiskVerdict {
119
+ risk: TargetRisk;
120
+ clause: string;
121
+ }
122
+ /** First match wins; `navigation` has to be earned, everything unrecognised is `unknown`. */
123
+ export declare function explainTargetRisk(facts: RawTargetFacts, ctx: RiskContext): RiskVerdict;
124
+ export declare function classifyTargetRisk(facts: RawTargetFacts, ctx: RiskContext): TargetRisk;
125
+ /** The only elements one auto-heal click may ever touch. */
126
+ export declare function isHealable(facts: RawTargetFacts, ctx: RiskContext): boolean;
127
+ /**
128
+ * Identity of a target across the gap between recommending and clicking.
129
+ * Covers the full href (query included, hashed so it is not recoverable), so
130
+ * `?id=1` swapped for `?id=2&action=delete` is a different target. No values,
131
+ * no position: a rect or an index is not what makes an element the same one.
132
+ */
133
+ export declare function fingerprintTarget(facts: RawTargetFacts): string;
134
+ /**
135
+ * Identity of the rules above, for the benchmark basis. The classifier decides
136
+ * what may be healed just as much as the model and the thresholds do, so a
137
+ * recorded pass must stop vouching once a lexicon, a path term, a benign query
138
+ * key or the agent-address pattern changes. The data is hashed; bump
139
+ * RISK_RULES_VERSION for a change in logic that the data cannot show.
140
+ */
141
+ export declare const RISK_RULES_VERSION = "rk1";
142
+ export declare const RISK_RULES_HASH: string;
143
+ /**
144
+ * Does this text address an automated reader rather than a person? A page that
145
+ * carries such a control is adversarial ground: whatever Jev concludes there,
146
+ * nothing on it is acted on without a person asking again.
147
+ */
148
+ export declare function addressesAgent(text: unknown): boolean;
149
+ export interface TargetPhrase {
150
+ phrase: string;
151
+ source: 'textHint' | 'selector-text' | 'selector-generic';
152
+ }
153
+ /**
154
+ * What the caller was trying to reach. An explicit textHint wins; otherwise
155
+ * only text-semantic selector forms count. The generic quoted-string fallback
156
+ * is kept for ranking but flagged, because it turns `[data-testid="tweetButton"]`
157
+ * into the intent "tweetButton" — good enough to sort hints, never to act on.
158
+ */
159
+ export declare function extractTargetPhrase(selector: string | undefined | null, textHint?: string | null): TargetPhrase | null;
160
+ /**
161
+ * Reasons an intent may be advised on but never healed: it names an action,
162
+ * it aims at an editable, its selector is scoped (page-wide healing would
163
+ * silently drop the scope), or the phrase is a guess.
164
+ */
165
+ export declare function intentVeto(phrase: TargetPhrase | null, selector: string | undefined | null): string | null;
166
+ //# sourceMappingURL=browser-risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-risk.d.ts","sourceRoot":"","sources":["../../src/services/browser-risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzI;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1H,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,0GAA0G;AAC1G,eAAO,MAAM,aAAa,sTAKhB,CAAC;AAEX,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,aAAuG,CAAC;AACtI,0GAA0G;AAC1G,eAAO,MAAM,aAAa,aAA4D,CAAC;AAOvF,6HAA6H;AAC7H,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAyHD,eAAO,MAAM,UAAU,QAAyB,CAAC;AACjD,eAAO,MAAM,OAAO,QAAgC,CAAC;AACrD,eAAO,MAAM,OAAO,QAAsB,CAAC;AAC3C,eAAO,MAAM,UAAU,QAAyB,CAAC;AACjD,eAAO,MAAM,cAAc,QAA6B,CAAC;AACzD,eAAO,MAAM,QAAQ,QAAuB,CAAC;AAE7C,6CAA6C;AAC7C,eAAO,MAAM,SAAS,QAA4G,CAAC;AAUnI,+GAA+G;AAC/G,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAQxG;AAMD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIlD;AAmBD,MAAM,WAAW,YAAY;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE9E;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CASrE;AAID,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,MAAM,CAGrE;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAMzI;AASD,MAAM,WAAW,WAAW;IAAG,OAAO,EAAE,MAAM,CAAA;CAAE;AAChD,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAgDjE,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,CAatF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAEtF;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAG/D;AAgBD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,eAAe,QAEE,CAAC;AAE/B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGrD;AAID,MAAM,WAAW,YAAY;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,kBAAkB,CAAA;CAAE;AAE3G;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAYtH;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAa1G"}
@@ -0,0 +1,458 @@
1
+ /**
2
+ * Deterministic risk of acting on a page element, the URL sanitizer, and the
3
+ * target fingerprint.
4
+ *
5
+ * Pure: no DOM, no sqlite, no TypeSafe client. The Neural Interface imports
6
+ * the compiled copy to classify what its collector found, the MCP layer uses
7
+ * it to veto intents, and the browser benchmark runs fixtures through it, so
8
+ * "is this safe to click again" has one definition everywhere.
9
+ *
10
+ * `navigation` is an allow-list verdict. An element earns it only by passing
11
+ * every clause below; anything not positively recognised is `unknown`, and
12
+ * only `navigation` may ever be auto-healed. Jev never sees this module's
13
+ * inputs and cannot influence its output: no page text can talk an element
14
+ * into eligibility.
15
+ */
16
+ import { createHash } from 'node:crypto';
17
+ /** Attributes that make an anchor a write, whatever its href says. The collector probes exactly these. */
18
+ export const HANDLER_ATTRS = [
19
+ 'onclick', 'onmousedown', 'onmouseup', 'onpointerdown', 'onpointerup',
20
+ 'data-method', 'data-turbo-method', 'data-remote', 'data-confirm', 'data-turbo-confirm', 'data-action',
21
+ 'hx-post', 'hx-put', 'hx-patch', 'hx-delete', 'formaction',
22
+ 'wire:click', 'x-on:click', '@click', 'v-on:click', 'ng-click',
23
+ ];
24
+ /** Query keys that page through or filter a view. Any other key makes a link's effect unknowable. */
25
+ export const BENIGN_QUERY_KEYS = new Set(['page', 'p', 'tab', 'view', 'sort', 'order', 'lang', 'locale', 'hl', 'q', 'ref', 'source']);
26
+ /** Languages the lexicons below cover. A page in any other language cannot be classified `navigation`. */
27
+ export const LEXICON_LANGS = new Set(['en', 'pt', 'es', 'de', 'fr', 'it', 'tr', 'ja']);
28
+ const PAGE_EXTENSIONS = new Set(['', 'html', 'htm', 'php', 'asp', 'aspx', 'jsp']);
29
+ // --- Text normalisation ---
30
+ const INVISIBLE = /[­​-‏‪-‮⁠-⁤]/g;
31
+ /** NFKC, zero-width and bidi controls removed, whitespace collapsed, lowercased. Used for display-independent comparison. */
32
+ export function normalizeName(value) {
33
+ return String(value ?? '').normalize('NFKC').replace(INVISIBLE, '').replace(/[‘’ʼ]/g, '\'').replace(/\s+/g, ' ').trim().toLowerCase();
34
+ }
35
+ /** normalizeName plus diacritic folding, so "Déconnexion" and "deconnexion" meet the same lexicon entry. */
36
+ function fold(value) {
37
+ // Turkish dotless ı has no decomposition, so NFD alone would leave "satın al" unequal to "satin al".
38
+ return normalizeName(value).normalize('NFD').replace(/\p{M}+/gu, '').normalize('NFC').replace(/ı/g, 'i').replace(/ß/g, 'ss');
39
+ }
40
+ /** "d e l e t e" → "delete". Only when every token is a single letter, so ordinary phrases are left alone. */
41
+ function despaced(folded) {
42
+ return /^(?:\p{L}\s){3,}\p{L}$/u.test(folded) ? folded.replace(/\s/g, '') : null;
43
+ }
44
+ // --- Lexicons ---
45
+ const TERMS = {
46
+ payment: [
47
+ // Everything the server's MONEY_TEXT_RE names, then the general vocabulary of spending.
48
+ 'boost', 'boost post', 'turbinar', 'impulsionar', 'promote', 'promote post', 'promover', 'promocionar', 'promouvoir', 'bewerben',
49
+ 'advertise', 'anuncie', 'criar anuncio', 'create ad', 'ad manager', 'ads manager', 'gerenciador de anuncios',
50
+ 'orcamento', 'orcamento diario', 'daily budget', 'set budget', 'set a budget', 'definir orcamento',
51
+ 'add payment', 'payment method', 'forma de pagamento', 'metodo de pagamento', 'spend limit',
52
+ 'confirm and pay', 'confirm payment', 'confirm pagamento', 'confirmar and pay', 'confirmar payment', 'confirmar pagamento',
53
+ 'buy', 'buy now', 'purchase', 'pay', 'pay now', 'checkout', 'check out', 'place order', 'order now', 'add to cart', 'add to bag', 'cart', 'basket',
54
+ 'upgrade', 'donate', 'send tip', 'leave a tip', 'billing', 'payment', 'payments', 'subscribe now', 'start trial', 'start free trial',
55
+ 'comprar', 'pagar', 'finalizar compra', 'carrinho', 'assinar', 'doar', 'pagamento',
56
+ 'carrito', 'suscribirse', 'donar', 'pago',
57
+ 'kaufen', 'jetzt kaufen', 'bezahlen', 'zur kasse', 'warenkorb', 'abonnieren', 'spenden', 'zahlung',
58
+ 'acheter', 'payer', 'panier', 'commander', 's\'abonner', 'faire un don', 'paiement',
59
+ 'acquista', 'compra', 'paga', 'carrello', 'abbonati', 'dona', 'pagamento',
60
+ 'satin al', 'ode', 'sepet', 'odeme',
61
+ '購入', '支払', 'カート', '注文', '課金',
62
+ // Moving money and the billing area, per language. Bare subscription nouns are left out on purpose: payment is
63
+ // tested first, so "Cancelar assinatura" would stop reading as the destructive control it is. A link to such a page is navigation in the DOM's eyes and
64
+ // payment in ours: auto-heal stays away from paid surfaces altogether, as the money guard does.
65
+ 'transfer money', 'send money', 'wire transfer', 'withdraw', 'top up', 'add funds', 'renew subscription', 'renew plan', 'pay tuition',
66
+ 'transferir', 'transferencia', 'transferencias', 'pix', 'faturamento', 'cobranca', 'fatura', 'faturas', 'assine', 'renovar',
67
+ 'facturacion', 'factura', 'facturas', 'tramitar pedido',
68
+ 'uberweisen', 'uberweisung', 'abrechnung', 'rechnung', 'rechnungen', 'verlangern',
69
+ 'virement', 'facturation', 'facture', 'factures', 'renouveler',
70
+ 'bonifico', 'fatturazione', 'fattura', 'fatture', 'rinnova',
71
+ 'havale', 'para gonder', 'faturalandirma', 'abone ol',
72
+ '振込', '送金', '請求', '料金',
73
+ ],
74
+ authentication: [
75
+ 'log out', 'logout', 'sign out', 'signout', 'log in', 'login', 'sign in', 'signin', 'sign up', 'signup', 'register', 'create account',
76
+ 'forgot password', 'reset password', 'verify', 'authenticate', 'continue with google', 'continue with facebook', 'continue with apple',
77
+ 'sair', 'entrar', 'encerrar sessao', 'terminar sessao', 'iniciar sessao', 'cadastrar', 'cadastre-se', 'criar conta', 'esqueci a senha',
78
+ 'cerrar sesion', 'salir', 'iniciar sesion', 'acceder', 'registrarse', 'crear cuenta',
79
+ 'abmelden', 'ausloggen', 'anmelden', 'einloggen', 'registrieren', 'konto erstellen', 'passwort vergessen',
80
+ 'deconnexion', 'se deconnecter', 'connexion', 'se connecter', 's\'inscrire', 'creer un compte', 'mot de passe oublie',
81
+ 'esci', 'disconnetti', 'accedi', 'registrati', 'crea account',
82
+ 'cikis', 'cıkıs', 'oturumu kapat', 'giris', 'giris yap', 'kaydol', 'kayit ol',
83
+ 'ログアウト', 'ログイン', 'サインアウト', 'サインイン', '登録', '新規登録',
84
+ ],
85
+ file: [
86
+ 'upload', 'attach', 'attachment', 'import', 'choose file', 'browse files', 'download', 'export',
87
+ 'enviar arquivo', 'anexar', 'importar', 'baixar', 'exportar', 'carregar arquivo',
88
+ 'subir archivo', 'adjuntar', 'descargar',
89
+ 'hochladen', 'anhangen', 'importieren', 'herunterladen', 'exportieren',
90
+ 'televerser', 'joindre', 'importer', 'telecharger', 'exporter',
91
+ 'carica', 'allega', 'scarica', 'esporta',
92
+ 'yukle', 'indir', 'ice aktar', 'disa aktar',
93
+ 'アップロード', 'ダウンロード', '添付', 'インポート', 'エクスポート',
94
+ ],
95
+ publish: [
96
+ 'publish', 'post', 'send', 'share', 'tweet', 'reply', 'comment', 'repost', 'retweet', 'like', 'unlike', 'follow', 'unfollow', 'invite',
97
+ 'approve', 'accept', 'confirm', 'vote', 'rsvp', 'join', 'message', 'react', 'submit', 'submit for approval', 'send for approval',
98
+ 'publicar', 'postar', 'enviar', 'compartilhar', 'comentar', 'responder', 'curtir', 'seguir', 'aprovar', 'aceitar', 'confirmar', 'participar', 'convidar',
99
+ 'compartir', 'me gusta', 'aprobar', 'aceptar', 'unirse', 'invitar',
100
+ 'veroffentlichen', 'posten', 'senden', 'an gruppe senden', 'zur genehmigung senden', 'zur bestatigung senden', 'teilen', 'kommentieren', 'antworten',
101
+ 'gefallt mir', 'folgen', 'genehmigen', 'akzeptieren', 'bestatigen', 'beitreten', 'einladen', 'absenden',
102
+ 'publier', 'envoyer', 'partager', 'commenter', 'repondre', 'j\'aime', 'suivre', 'approuver', 'accepter', 'confirmer', 'rejoindre', 'inviter',
103
+ 'pubblica', 'pubblicare', 'invia', 'condividi', 'commenta', 'rispondi', 'mi piace', 'segui', 'approva', 'accetta', 'conferma', 'partecipa',
104
+ 'paylas', 'gonder', 'yanitla', 'begen', 'takip et', 'onayla', 'katil', 'davet et',
105
+ '投稿', '送信', '共有', '返信', 'いいね', 'フォロー', '承認', '参加', 'opublikuj', 'wyslij', 'udostepnij',
106
+ ],
107
+ destructive: [
108
+ 'delete', 'remove', 'erase', 'discard', 'destroy', 'clear all', 'clear history', 'reset', 'revoke', 'deactivate', 'close account', 'delete account',
109
+ 'cancel subscription', 'cancel order', 'unsubscribe', 'block', 'ban', 'leave group', 'leave', 'archive', 'trash', 'empty trash', 'disconnect', 'uninstall',
110
+ 'excluir', 'apagar', 'remover', 'deletar', 'descartar', 'desativar', 'cancelar assinatura', 'sair do grupo', 'bloquear', 'redefinir', 'arquivar', 'lixeira',
111
+ 'eliminar', 'borrar', 'quitar', 'desactivar', 'cancelar suscripcion', 'salir del grupo', 'restablecer', 'archivar', 'papelera',
112
+ 'loschen', 'entfernen', 'verwerfen', 'deaktivieren', 'kundigen', 'blockieren', 'zurucksetzen', 'abbestellen', 'konto loschen', 'gruppe verlassen', 'archivieren', 'papierkorb',
113
+ 'supprimer', 'effacer', 'retirer', 'desactiver', 'resilier', 'bloquer', 'se desabonner', 'reinitialiser', 'quitter le groupe', 'archiver', 'corbeille',
114
+ 'elimina', 'cancella', 'rimuovi', 'disattiva', 'blocca', 'annulla iscrizione', 'reimposta', 'archivia', 'cestino',
115
+ 'sil', 'kaldir', 'engelle', 'iptal et', 'sifirla', 'gruptan ayril', 'arsivle',
116
+ '削除', '消去', '解除', 'ブロック', '退会', 'リセット', 'ゴミ箱', 'usun',
117
+ ],
118
+ write: [
119
+ // Deliberately no bare "new", "move" or "book": they are adjectives and nouns far more often
120
+ // than verbs ("What's new", "?sort=new", "Address book"), and a non-anchor is `unknown` anyway.
121
+ 'save', 'save changes', 'apply', 'update', 'add', 'create', 'create new', 'edit', 'rename', 'move to', 'duplicate', 'enable', 'disable', 'turn on', 'turn off',
122
+ 'subscribe', 'mark as read', 'mark as', 'pin', 'unpin', 'mute', 'unmute', 'hide', 'report', 'flag', 'book now', 'reserve', 'schedule', 'assign', 'merge',
123
+ 'salvar', 'aplicar', 'atualizar', 'adicionar', 'criar', 'editar', 'renomear', 'ativar', 'denunciar', 'agendar',
124
+ 'guardar', 'actualizar', 'anadir', 'agregar', 'crear', 'renombrar', 'activar', 'reportar', 'programar',
125
+ 'speichern', 'anwenden', 'aktualisieren', 'hinzufugen', 'erstellen', 'bearbeiten', 'umbenennen', 'aktivieren', 'melden', 'planen',
126
+ 'enregistrer', 'appliquer', 'mettre a jour', 'ajouter', 'creer', 'modifier', 'renommer', 'activer', 'signaler', 'planifier',
127
+ 'salva', 'applica', 'aggiorna', 'aggiungi', 'crea', 'modifica', 'rinomina', 'attiva', 'segnala',
128
+ 'kaydet', 'uygula', 'guncelle', 'ekle', 'olustur', 'duzenle', 'etkinlestir', 'bildir',
129
+ '保存', '適用', '更新', '追加', '作成', '編集', '有効', '無効', '報告',
130
+ ],
131
+ };
132
+ /** Path-only vocabulary: API-ish and action-ish segments a label lexicon would never see. */
133
+ const PATH_TERMS = ['oauth', 'oauth2', 'sso', 'auth', 'saml', 'api', 'action', 'actions', 'do', 'cmd', 'rpc', 'graphql', 'webhook', 'callback', 'redirect', 'redir', 'goto', 'out', 'exit', 'track', 'click'];
134
+ const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
135
+ const isCjk = (s) => /^[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}ー]+$/u.test(s);
136
+ function lexicon(terms) {
137
+ const folded = [...new Set(terms.map(fold).filter(Boolean))].sort((a, b) => b.length - a.length);
138
+ const cjk = folded.filter(isCjk).map(escapeRe);
139
+ // Up to two filler words may sit inside a multi-word term: "cancel my subscription", "close this account",
140
+ // "Konto jetzt löschen", "turn notifications off". People and interfaces both write them that way.
141
+ const words = folded.filter(t => !isCjk(t)).map(t => escapeRe(t).replace(/ /g, "(?:\\s+[\\p{L}\\p{N}']+){0,2}\\s+"));
142
+ const parts = [];
143
+ if (words.length)
144
+ parts.push(`(?<![\\p{L}\\p{N}])(?:${words.join('|')})(?![\\p{L}\\p{N}])`);
145
+ if (cjk.length)
146
+ parts.push(`(?:${cjk.join('|')})`);
147
+ return new RegExp(parts.join('|'), 'u');
148
+ }
149
+ export const PAYMENT_RE = lexicon(TERMS.payment);
150
+ export const AUTH_RE = lexicon(TERMS.authentication);
151
+ export const FILE_RE = lexicon(TERMS.file);
152
+ export const PUBLISH_RE = lexicon(TERMS.publish);
153
+ export const DESTRUCTIVE_RE = lexicon(TERMS.destructive);
154
+ export const WRITE_RE = lexicon(TERMS.write);
155
+ const PATH_RE = lexicon(PATH_TERMS);
156
+ /** Anything that is not plain navigation. */
157
+ export const DANGER_RE = lexicon([...TERMS.authentication, ...TERMS.file, ...TERMS.publish, ...TERMS.destructive, ...TERMS.write]);
158
+ function hits(re, text) {
159
+ const folded = fold(text);
160
+ if (!folded)
161
+ return false;
162
+ if (re.test(folded))
163
+ return true;
164
+ const joined = despaced(folded);
165
+ return joined ? re.test(joined) : false;
166
+ }
167
+ /** Does this text name something other than plain navigation? Used for labels, intents and selectors alike. */
168
+ export function lexiconClass(text) {
169
+ if (hits(PAYMENT_RE, text))
170
+ return 'payment';
171
+ if (hits(AUTH_RE, text))
172
+ return 'authentication';
173
+ if (hits(FILE_RE, text))
174
+ return 'file';
175
+ if (hits(PUBLISH_RE, text))
176
+ return 'publish';
177
+ if (hits(DESTRUCTIVE_RE, text))
178
+ return 'destructive';
179
+ if (hits(WRITE_RE, text))
180
+ return 'write';
181
+ return null;
182
+ }
183
+ // --- URLs ---
184
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
185
+ /** Long opaque strings: session ids, magic-link tokens, JWT heads. */
186
+ export function isTokenLike(value) {
187
+ if (!value)
188
+ return false;
189
+ if (value.startsWith('eyJ') && value.length >= 16)
190
+ return true;
191
+ return value.length >= 24 && /^[A-Za-z0-9_\-+=.~%]+$/.test(value) && /\d/.test(value) && /[A-Za-z]/.test(value);
192
+ }
193
+ function redactSegment(raw) {
194
+ let segment = raw.split(';')[0];
195
+ try {
196
+ segment = decodeURIComponent(segment);
197
+ }
198
+ catch { /* keep the encoded form */ }
199
+ if (!segment)
200
+ return '';
201
+ if (segment.includes('@'))
202
+ return ':email';
203
+ if (UUID_RE.test(segment) || /^[0-9a-f]{12,}$/i.test(segment) || /^\d{6,}$/.test(segment))
204
+ return ':id';
205
+ if (isTokenLike(segment))
206
+ return ':token';
207
+ // Mixed letters-and-digits handles (video ids, short links) identify a thing, not a place.
208
+ // "iphone-15-pro" and "browser-v2" are words with a number in them and stay.
209
+ if (/^[A-Za-z0-9_-]{10,}$/.test(segment) && /[A-Za-z]/.test(segment)) {
210
+ const digits = segment.match(/\d/g)?.length ?? 0;
211
+ const mixedCase = /[a-z]/.test(segment) && /[A-Z]/.test(segment);
212
+ if ((digits >= 2 && mixedCase) || (digits >= 3 && !/[-_]/.test(segment)))
213
+ return ':id';
214
+ }
215
+ return segment.slice(0, 40);
216
+ }
217
+ /**
218
+ * What may leave the machine about a URL: scheme, host and a redacted path.
219
+ * Never userinfo, query, fragment or matrix parameters. Non-http(s) schemes
220
+ * keep only the scheme: file:, data: and blob: carry paths or content.
221
+ */
222
+ export function sanitizeUrl(raw, base) {
223
+ let url;
224
+ try {
225
+ url = new URL(String(raw ?? ''), base);
226
+ }
227
+ catch {
228
+ return { scheme: '', origin: '', path: '' };
229
+ }
230
+ const scheme = url.protocol.replace(/:$/, '');
231
+ if (scheme !== 'http' && scheme !== 'https')
232
+ return { scheme, origin: '', path: '' };
233
+ const host = url.hostname.split('.').map(label => (isTokenLike(label) || /^[0-9a-f]{16,}$/i.test(label) ? ':token' : label)).join('.');
234
+ const port = url.port ? `:${url.port}` : '';
235
+ const segments = url.pathname.split('/').filter(Boolean).slice(0, 6).map(redactSegment).filter(Boolean);
236
+ return { scheme, origin: `${scheme}://${host}${port}`, path: `/${segments.join('/')}`.slice(0, 120) };
237
+ }
238
+ // --- Names ---
239
+ /** The name a person would read, in accessible-name priority order. */
240
+ export function bestName(facts) {
241
+ const n = facts.names;
242
+ return (n.aria || n.labelledby || n.label || n.text || n.alt || n.title || n.placeholder || '').replace(/\s+/g, ' ').trim();
243
+ }
244
+ const allNames = (facts) => Object.values(facts.names).filter(Boolean).join(' \n ');
245
+ export function candidateKind(facts) {
246
+ if (facts.toggles)
247
+ return 'toggle';
248
+ if (facts.editable)
249
+ return 'field';
250
+ if (facts.tag === 'a' || facts.role === 'link')
251
+ return 'link';
252
+ if (facts.tag === 'button' || facts.role === 'button' || facts.role === 'tab' || facts.role === 'menuitem' || (facts.tag === 'input' && ['button', 'submit', 'reset', 'image'].includes(facts.inputType ?? '')))
253
+ return 'button';
254
+ return 'other';
255
+ }
256
+ /** Latin text mixed with Cyrillic or Greek is the homoglyph pattern ("Dеlete" with a Cyrillic е). CJK beside Latin is ordinary. */
257
+ function mixedConfusableScripts(text) {
258
+ return /\p{Script=Latin}/u.test(text) && /[\p{Script=Cyrillic}\p{Script=Greek}]/u.test(text);
259
+ }
260
+ /** Why an anchor is not plain navigation, or null when every clause holds. */
261
+ function navigationFailure(facts, ctx) {
262
+ if (facts.tag !== 'a' || !facts.hrefAttr || !facts.hrefRaw || (facts.role !== null && facts.role !== 'link'))
263
+ return 'N1 not a plain anchor with an href';
264
+ if (facts.editable || facts.containsEditable || facts.insideForm || facts.isSubmit || facts.disabled)
265
+ return 'N2 editable, inside a form, a submit control, or disabled';
266
+ if (facts.download || facts.ping || (facts.target !== '' && facts.target !== '_self') || facts.baseTarget)
267
+ return 'N3 download, ping, or a target other than the current tab';
268
+ if (facts.handlerAttrs.length || facts.hasPopup || facts.toggles)
269
+ return 'N4 carries a handler attribute, opens a popup, or toggles state';
270
+ let href;
271
+ let page;
272
+ try {
273
+ href = new URL(facts.hrefRaw);
274
+ page = new URL(ctx.pageUrl);
275
+ }
276
+ catch {
277
+ return 'N5 unparsable URL';
278
+ }
279
+ if ((href.protocol !== 'http:' && href.protocol !== 'https:') || href.username || href.password)
280
+ return 'N5 not http(s), or carries userinfo';
281
+ if (href.origin !== page.origin)
282
+ return 'N5 leaves the current origin';
283
+ const attr = facts.hrefAttr.trim();
284
+ if (!attr || attr.startsWith('#') || (href.pathname === page.pathname && href.search === page.search))
285
+ return 'N6 same-document link';
286
+ for (const [key, value] of href.searchParams) {
287
+ const k = key.toLowerCase();
288
+ if (!BENIGN_QUERY_KEYS.has(k) && !k.startsWith('utm_'))
289
+ return 'N7 query key outside the benign set';
290
+ if (value.length > 64 || isTokenLike(value))
291
+ return 'N7 long or token-like query value';
292
+ }
293
+ const segments = href.pathname.split('/').filter(Boolean);
294
+ if (segments.length > 8)
295
+ return 'N8 path deeper than eight segments';
296
+ const extension = /\.([A-Za-z0-9]{1,5})$/.exec(segments[segments.length - 1] ?? '')?.[1]?.toLowerCase() ?? '';
297
+ if (!PAGE_EXTENSIONS.has(extension))
298
+ return 'N8 href points at a file';
299
+ for (const segment of segments) {
300
+ let decoded = segment;
301
+ try {
302
+ decoded = decodeURIComponent(segment);
303
+ }
304
+ catch { /* keep */ }
305
+ if (isTokenLike(decoded) && !UUID_RE.test(decoded))
306
+ return 'N8 opaque token in the path';
307
+ }
308
+ const pathWords = decodeSafe(href.pathname).replace(/[/_.\-+]+/g, ' ');
309
+ const queryWords = [...href.searchParams].map(([k, v]) => `${k} ${v}`).join(' ').replace(/[/_.\-+]+/g, ' ');
310
+ const name = bestName(facts);
311
+ const normalized = normalizeName(name);
312
+ const letters = normalized.match(/\p{L}/gu)?.length ?? 0;
313
+ if (letters < 2 || normalized.length > 80 || mixedConfusableScripts(normalized))
314
+ return 'N9 name missing, overlong, or mixing confusable scripts';
315
+ // A label that reads like a selector or markup is written for a tool, not for a person.
316
+ if (/>>|["\][{}<>`\\]|\b(?:css|xpath|text|role)\s*=/i.test(name))
317
+ return 'N9 name carries selector or markup syntax';
318
+ // A label written for an automated reader is bait, whatever it links to.
319
+ if (addressesAgent(name))
320
+ return 'N9 name addresses an automated reader';
321
+ if (!LEXICON_LANGS.has(facts.lang))
322
+ return 'N9 page language not covered by the lexicon';
323
+ const union = `${allNames(facts)} \n ${pathWords} \n ${queryWords}`;
324
+ if (lexiconClass(union) || hits(PATH_RE, pathWords))
325
+ return 'N10 name, path or query names an action';
326
+ if (facts.engagement || facts.inDraftZone)
327
+ return 'N11 engagement control, or inside a draft zone';
328
+ return null;
329
+ }
330
+ function decodeSafe(value) { try {
331
+ return decodeURIComponent(value);
332
+ }
333
+ catch {
334
+ return value;
335
+ } }
336
+ /** First match wins; `navigation` has to be earned, everything unrecognised is `unknown`. */
337
+ export function explainTargetRisk(facts, ctx) {
338
+ const names = allNames(facts);
339
+ const url = facts.hrefRaw ? (() => { try {
340
+ return new URL(facts.hrefRaw);
341
+ }
342
+ catch {
343
+ return null;
344
+ } })() : null;
345
+ const pathAndQuery = url ? `${decodeSafe(url.pathname)} ${decodeSafe(url.search)}`.replace(/[/_.\-+?&=]+/g, ' ') : '';
346
+ if (hits(PAYMENT_RE, names) || hits(PAYMENT_RE, pathAndQuery))
347
+ return { risk: 'payment', clause: 'payment vocabulary in a name or the href' };
348
+ if (facts.credentialField || hits(AUTH_RE, names) || hits(AUTH_RE, pathAndQuery))
349
+ return { risk: 'authentication', clause: 'credential field or sign-in vocabulary' };
350
+ if (facts.inputType === 'file' || facts.download || hits(FILE_RE, names))
351
+ return { risk: 'file', clause: 'file input, download attribute or file vocabulary' };
352
+ if (facts.engagement || hits(PUBLISH_RE, names))
353
+ return { risk: 'publish', clause: 'engagement control or publishing vocabulary' };
354
+ if (hits(DESTRUCTIVE_RE, names) || hits(DESTRUCTIVE_RE, pathAndQuery))
355
+ return { risk: 'destructive', clause: 'destructive vocabulary in a name or the href' };
356
+ if (facts.editable || facts.toggles || hits(WRITE_RE, names))
357
+ return { risk: 'write', clause: 'editable, toggle, or write vocabulary' };
358
+ if (facts.insideForm || facts.isSubmit)
359
+ return { risk: 'form', clause: 'inside a form or a submit control' };
360
+ const failure = navigationFailure(facts, ctx);
361
+ return failure ? { risk: 'unknown', clause: failure } : { risk: 'navigation', clause: 'N1-N11 hold' };
362
+ }
363
+ export function classifyTargetRisk(facts, ctx) {
364
+ return explainTargetRisk(facts, ctx).risk;
365
+ }
366
+ /** The only elements one auto-heal click may ever touch. */
367
+ export function isHealable(facts, ctx) {
368
+ return !facts.disabled && classifyTargetRisk(facts, ctx) === 'navigation';
369
+ }
370
+ /**
371
+ * Identity of a target across the gap between recommending and clicking.
372
+ * Covers the full href (query included, hashed so it is not recoverable), so
373
+ * `?id=1` swapped for `?id=2&action=delete` is a different target. No values,
374
+ * no position: a rect or an index is not what makes an element the same one.
375
+ */
376
+ export function fingerprintTarget(facts) {
377
+ const href = createHash('sha256').update(facts.hrefRaw ?? '').digest('hex');
378
+ return createHash('sha256').update(JSON.stringify(['v1', facts.tag, facts.role, normalizeName(bestName(facts)), href, facts.inputType, facts.insideForm, facts.isSubmit])).digest('hex');
379
+ }
380
+ // --- Pages that talk to the agent ---
381
+ const AGENT_ADDRESS_RE = new RegExp([
382
+ String.raw `\b(?:ignore|disregard|forget|override)\b[^.]{0,40}\b(?:task|instructions?|prompt|previous|above|rules?)\b`,
383
+ String.raw `\b(?:ai|llm|gpt|claude|assistant|agents?|bots?|crawlers?|language models?|automation)\b[^.]{0,60}\b(?:click|choose|select|pick|press|tap|must|should|answer)\b`,
384
+ String.raw `\b(?:click|choose|select|pick|press)\s+(?:me|this|here)\b[^.]{0,40}\b(?:to continue|instead|now|first)\b`,
385
+ String.raw `\b(?:system|assistant|developer)\s*(?:prompt|message|note)?\s*:`,
386
+ String.raw `\bas an ai\b|\byou are (?:an? )?(?:ai|assistant|agent|language model)\b`,
387
+ // The text is folded before it is tested (lowercase, no diacritics), so the patterns are written that way.
388
+ String.raw `\bignor\w*\b[^.]{0,40}\b(?:tarefa|instruc\w+|instrucoes|aufgabe\w*|anweisung\w*|tache|consignes?|tarea|compito|istruzion\w+|gorev\w*|talimat\w*)\b`,
389
+ String.raw `\b(?:ia|ki|agentes?|asistentes?|assistentes?|ki-assistent\w*|assistent\w*|robots?|yapay zeka)\b[^.]{0,60}\b(?:cliqu\w+|clic|pulsa\w*|klick\w*|wahle\w*|selecion\w+|seleccion\w+|escolh\w+|elige\w*|choisi\w+|scegli\w*|tikla\w*)\b`,
390
+ String.raw `(?:指示|命令|タスク)[^。]{0,12}(?:無視|従わ)|(?:ai|エージェント|アシスタント)[^。]{0,20}(?:クリック|選択|押し)`,
391
+ ].join('|'), 'iu');
392
+ /**
393
+ * Identity of the rules above, for the benchmark basis. The classifier decides
394
+ * what may be healed just as much as the model and the thresholds do, so a
395
+ * recorded pass must stop vouching once a lexicon, a path term, a benign query
396
+ * key or the agent-address pattern changes. The data is hashed; bump
397
+ * RISK_RULES_VERSION for a change in logic that the data cannot show.
398
+ */
399
+ export const RISK_RULES_VERSION = 'rk1';
400
+ export const RISK_RULES_HASH = createHash('sha256').update(JSON.stringify([
401
+ RISK_RULES_VERSION, TERMS, PATH_TERMS, [...BENIGN_QUERY_KEYS].sort(), [...HANDLER_ATTRS], [...LEXICON_LANGS].sort(), [...PAGE_EXTENSIONS].sort(), AGENT_ADDRESS_RE.source,
402
+ ])).digest('hex').slice(0, 12);
403
+ /**
404
+ * Does this text address an automated reader rather than a person? A page that
405
+ * carries such a control is adversarial ground: whatever Jev concludes there,
406
+ * nothing on it is acted on without a person asking again.
407
+ */
408
+ export function addressesAgent(text) {
409
+ const folded = fold(text);
410
+ return folded.length >= 8 && AGENT_ADDRESS_RE.test(folded);
411
+ }
412
+ /**
413
+ * What the caller was trying to reach. An explicit textHint wins; otherwise
414
+ * only text-semantic selector forms count. The generic quoted-string fallback
415
+ * is kept for ranking but flagged, because it turns `[data-testid="tweetButton"]`
416
+ * into the intent "tweetButton" — good enough to sort hints, never to act on.
417
+ */
418
+ export function extractTargetPhrase(selector, textHint) {
419
+ const hint = String(textHint ?? '').replace(/\s+/g, ' ').trim();
420
+ if (hint.length >= 2)
421
+ return { phrase: hint.slice(0, 120), source: 'textHint' };
422
+ const sel = String(selector ?? '');
423
+ const semantic = /(?::has-text|:text|:text-is|:text-matches)\(\s*["']([^"']{2,80})["']/i.exec(sel)
424
+ || /(?:^|>>\s*)text\s*=\s*["']?([^"'>]{2,80})["']?/i.exec(sel)
425
+ || /\[\s*name\s*[~*^$|]?=\s*["']([^"']{2,80})["']/i.exec(sel)
426
+ || /\[\s*aria-label\s*[~*^$|]?=\s*["']([^"']{2,80})["']/i.exec(sel)
427
+ || /\[\s*(?:title|placeholder|alt)\s*[~*^$|]?=\s*["']([^"']{2,80})["']/i.exec(sel);
428
+ if (semantic)
429
+ return { phrase: semantic[1].replace(/\s+/g, ' ').trim().slice(0, 120), source: 'selector-text' };
430
+ const generic = /["']([^"']{3,80})["']/.exec(sel);
431
+ return generic ? { phrase: generic[1].replace(/\s+/g, ' ').trim().slice(0, 120), source: 'selector-generic' } : null;
432
+ }
433
+ /**
434
+ * Reasons an intent may be advised on but never healed: it names an action,
435
+ * it aims at an editable, its selector is scoped (page-wide healing would
436
+ * silently drop the scope), or the phrase is a guess.
437
+ */
438
+ export function intentVeto(phrase, selector) {
439
+ if (!phrase)
440
+ return 'no target phrase';
441
+ if (phrase.source === 'selector-generic')
442
+ return 'target phrase is a guess from a quoted selector fragment';
443
+ const named = lexiconClass(`${phrase.phrase} \n ${String(selector ?? '').replace(/[[\]="'():>~+.#_-]+/g, ' ')}`);
444
+ if (named)
445
+ return `intent names a ${named} action`;
446
+ const sel = String(selector ?? '');
447
+ if (/>>/.test(sel))
448
+ return 'selector is scoped with >>';
449
+ // `text=Help center` is one Playwright text selector: the space belongs to the text, it is not a descendant combinator.
450
+ const bare = /^text=/i.test(sel.trim()) ? '' : sel.replace(/\[[^\]]*\]|"[^"]*"|'[^']*'|\([^)]*\)/g, '');
451
+ if (/[^\s>+~]\s*[>+~]\s*[^\s>+~]|\S\s+\S/.test(bare.trim()))
452
+ return 'selector is scoped with a combinator';
453
+ const leaf = bare.trim().split(/\s+/).pop() ?? '';
454
+ if (/^(?:input|textarea|select)\b/i.test(leaf) || /contenteditable|\[type\s*=/i.test(sel) || /^role=(?:textbox|combobox|searchbox|checkbox|radio|switch|slider|spinbutton)\b/i.test(sel.trim()))
455
+ return 'selector targets an editable or a toggle';
456
+ return null;
457
+ }
458
+ //# sourceMappingURL=browser-risk.js.map