opencode-rehydra-core 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/LICENSE +22 -0
  2. package/README.en.md +191 -0
  3. package/README.md +191 -0
  4. package/dist/browser.d.ts +54 -0
  5. package/dist/browser.d.ts.map +1 -0
  6. package/dist/browser.js +74 -0
  7. package/dist/browser.js.map +1 -0
  8. package/dist/core/anonymizer.d.ts +309 -0
  9. package/dist/core/anonymizer.d.ts.map +1 -0
  10. package/dist/core/anonymizer.js +555 -0
  11. package/dist/core/anonymizer.js.map +1 -0
  12. package/dist/core/index.d.ts +6 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +6 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/crypto/index.d.ts +6 -0
  17. package/dist/crypto/index.d.ts.map +1 -0
  18. package/dist/crypto/index.js +6 -0
  19. package/dist/crypto/index.js.map +1 -0
  20. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  21. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  22. package/dist/crypto/pii-map-crypto.js +228 -0
  23. package/dist/crypto/pii-map-crypto.js.map +1 -0
  24. package/dist/index.d.ts +53 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +72 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/ner/bio-decoder.d.ts +64 -0
  29. package/dist/ner/bio-decoder.d.ts.map +1 -0
  30. package/dist/ner/bio-decoder.js +218 -0
  31. package/dist/ner/bio-decoder.js.map +1 -0
  32. package/dist/ner/index.d.ts +12 -0
  33. package/dist/ner/index.d.ts.map +1 -0
  34. package/dist/ner/index.js +12 -0
  35. package/dist/ner/index.js.map +1 -0
  36. package/dist/ner/inference-server-client.d.ts +81 -0
  37. package/dist/ner/inference-server-client.d.ts.map +1 -0
  38. package/dist/ner/inference-server-client.js +120 -0
  39. package/dist/ner/inference-server-client.js.map +1 -0
  40. package/dist/ner/inference-server-ner-model.d.ts +43 -0
  41. package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
  42. package/dist/ner/inference-server-ner-model.js +119 -0
  43. package/dist/ner/inference-server-ner-model.js.map +1 -0
  44. package/dist/ner/model-manager.d.ts +111 -0
  45. package/dist/ner/model-manager.d.ts.map +1 -0
  46. package/dist/ner/model-manager.js +334 -0
  47. package/dist/ner/model-manager.js.map +1 -0
  48. package/dist/ner/ner-model.d.ts +172 -0
  49. package/dist/ner/ner-model.d.ts.map +1 -0
  50. package/dist/ner/ner-model.js +514 -0
  51. package/dist/ner/ner-model.js.map +1 -0
  52. package/dist/ner/onnx-runtime.browser.d.ts +46 -0
  53. package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
  54. package/dist/ner/onnx-runtime.browser.js +90 -0
  55. package/dist/ner/onnx-runtime.browser.js.map +1 -0
  56. package/dist/ner/onnx-runtime.d.ts +72 -0
  57. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  58. package/dist/ner/onnx-runtime.js +132 -0
  59. package/dist/ner/onnx-runtime.js.map +1 -0
  60. package/dist/ner/token-window.d.ts +19 -0
  61. package/dist/ner/token-window.d.ts.map +1 -0
  62. package/dist/ner/token-window.js +101 -0
  63. package/dist/ner/token-window.js.map +1 -0
  64. package/dist/ner/tokenizer.d.ts +142 -0
  65. package/dist/ner/tokenizer.d.ts.map +1 -0
  66. package/dist/ner/tokenizer.js +362 -0
  67. package/dist/ner/tokenizer.js.map +1 -0
  68. package/dist/opencode-plugin/git-identity.d.ts +3 -0
  69. package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
  70. package/dist/opencode-plugin/git-identity.js +37 -0
  71. package/dist/opencode-plugin/git-identity.js.map +1 -0
  72. package/dist/opencode-plugin/github-username.d.ts +3 -0
  73. package/dist/opencode-plugin/github-username.d.ts.map +1 -0
  74. package/dist/opencode-plugin/github-username.js +41 -0
  75. package/dist/opencode-plugin/github-username.js.map +1 -0
  76. package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
  77. package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
  78. package/dist/opencode-plugin/identity-recognizer.js +21 -0
  79. package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
  80. package/dist/opencode-plugin/index.d.ts +7 -0
  81. package/dist/opencode-plugin/index.d.ts.map +1 -0
  82. package/dist/opencode-plugin/index.js +6 -0
  83. package/dist/opencode-plugin/index.js.map +1 -0
  84. package/dist/opencode-plugin/plugin.d.ts +39 -0
  85. package/dist/opencode-plugin/plugin.d.ts.map +1 -0
  86. package/dist/opencode-plugin/plugin.js +294 -0
  87. package/dist/opencode-plugin/plugin.js.map +1 -0
  88. package/dist/opencode-plugin/types.d.ts +33 -0
  89. package/dist/opencode-plugin/types.d.ts.map +1 -0
  90. package/dist/opencode-plugin/types.js +5 -0
  91. package/dist/opencode-plugin/types.js.map +1 -0
  92. package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
  93. package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
  94. package/dist/opencode-plugin/v2/anon-state.js +14 -0
  95. package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
  96. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
  97. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
  98. package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
  99. package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
  100. package/dist/opencode-plugin/v2/index.d.ts +17 -0
  101. package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
  102. package/dist/opencode-plugin/v2/index.js +17 -0
  103. package/dist/opencode-plugin/v2/index.js.map +1 -0
  104. package/dist/opencode-plugin/v2/logger.d.ts +24 -0
  105. package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
  106. package/dist/opencode-plugin/v2/logger.js +73 -0
  107. package/dist/opencode-plugin/v2/logger.js.map +1 -0
  108. package/dist/opencode-plugin/v2/options.d.ts +40 -0
  109. package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
  110. package/dist/opencode-plugin/v2/options.js +132 -0
  111. package/dist/opencode-plugin/v2/options.js.map +1 -0
  112. package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
  113. package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
  114. package/dist/opencode-plugin/v2/register-hooks.js +160 -0
  115. package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
  116. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
  117. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
  118. package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
  119. package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
  120. package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
  121. package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
  122. package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
  123. package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
  124. package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
  125. package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
  126. package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
  127. package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
  128. package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
  129. package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
  130. package/dist/opencode-plugin/v2/sessions.js +23 -0
  131. package/dist/opencode-plugin/v2/sessions.js.map +1 -0
  132. package/dist/opencode-plugin/v2/sse.d.ts +101 -0
  133. package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
  134. package/dist/opencode-plugin/v2/sse.js +235 -0
  135. package/dist/opencode-plugin/v2/sse.js.map +1 -0
  136. package/dist/opencode-plugin/v2/types.d.ts +188 -0
  137. package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
  138. package/dist/opencode-plugin/v2/types.js +10 -0
  139. package/dist/opencode-plugin/v2/types.js.map +1 -0
  140. package/dist/opencode-plugin/vcs-command.d.ts +3 -0
  141. package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
  142. package/dist/opencode-plugin/vcs-command.js +34 -0
  143. package/dist/opencode-plugin/vcs-command.js.map +1 -0
  144. package/dist/pipeline/index.d.ts +12 -0
  145. package/dist/pipeline/index.d.ts.map +1 -0
  146. package/dist/pipeline/index.js +12 -0
  147. package/dist/pipeline/index.js.map +1 -0
  148. package/dist/pipeline/prenormalize.d.ts +48 -0
  149. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  150. package/dist/pipeline/prenormalize.js +94 -0
  151. package/dist/pipeline/prenormalize.js.map +1 -0
  152. package/dist/pipeline/resolver.d.ts +56 -0
  153. package/dist/pipeline/resolver.d.ts.map +1 -0
  154. package/dist/pipeline/resolver.js +239 -0
  155. package/dist/pipeline/resolver.js.map +1 -0
  156. package/dist/pipeline/semantic-data-loader.d.ts +171 -0
  157. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  158. package/dist/pipeline/semantic-data-loader.js +677 -0
  159. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  160. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  161. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  162. package/dist/pipeline/semantic-enricher.js +322 -0
  163. package/dist/pipeline/semantic-enricher.js.map +1 -0
  164. package/dist/pipeline/tagger.d.ts +121 -0
  165. package/dist/pipeline/tagger.d.ts.map +1 -0
  166. package/dist/pipeline/tagger.js +545 -0
  167. package/dist/pipeline/tagger.js.map +1 -0
  168. package/dist/pipeline/title-extractor.d.ts +79 -0
  169. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  170. package/dist/pipeline/title-extractor.js +801 -0
  171. package/dist/pipeline/title-extractor.js.map +1 -0
  172. package/dist/pipeline/validator.d.ts +65 -0
  173. package/dist/pipeline/validator.d.ts.map +1 -0
  174. package/dist/pipeline/validator.js +292 -0
  175. package/dist/pipeline/validator.js.map +1 -0
  176. package/dist/proxy/index.d.ts +13 -0
  177. package/dist/proxy/index.d.ts.map +1 -0
  178. package/dist/proxy/index.js +12 -0
  179. package/dist/proxy/index.js.map +1 -0
  180. package/dist/proxy/providers/anthropic.d.ts +28 -0
  181. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  182. package/dist/proxy/providers/anthropic.js +265 -0
  183. package/dist/proxy/providers/anthropic.js.map +1 -0
  184. package/dist/proxy/providers/index.d.ts +19 -0
  185. package/dist/proxy/providers/index.d.ts.map +1 -0
  186. package/dist/proxy/providers/index.js +41 -0
  187. package/dist/proxy/providers/index.js.map +1 -0
  188. package/dist/proxy/providers/openai.d.ts +27 -0
  189. package/dist/proxy/providers/openai.d.ts.map +1 -0
  190. package/dist/proxy/providers/openai.js +203 -0
  191. package/dist/proxy/providers/openai.js.map +1 -0
  192. package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
  193. package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
  194. package/dist/proxy/providers/streaming-tool-loop.js +223 -0
  195. package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
  196. package/dist/proxy/providers/types.d.ts +109 -0
  197. package/dist/proxy/providers/types.d.ts.map +1 -0
  198. package/dist/proxy/providers/types.js +2 -0
  199. package/dist/proxy/providers/types.js.map +1 -0
  200. package/dist/proxy/proxy-server.d.ts +61 -0
  201. package/dist/proxy/proxy-server.d.ts.map +1 -0
  202. package/dist/proxy/proxy-server.js +146 -0
  203. package/dist/proxy/proxy-server.js.map +1 -0
  204. package/dist/proxy/rehydra-fetch.d.ts +35 -0
  205. package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
  206. package/dist/proxy/rehydra-fetch.js +631 -0
  207. package/dist/proxy/rehydra-fetch.js.map +1 -0
  208. package/dist/proxy/rehydra-proxy.d.ts +40 -0
  209. package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
  210. package/dist/proxy/rehydra-proxy.js +150 -0
  211. package/dist/proxy/rehydra-proxy.js.map +1 -0
  212. package/dist/proxy/sse-parser.d.ts +59 -0
  213. package/dist/proxy/sse-parser.d.ts.map +1 -0
  214. package/dist/proxy/sse-parser.js +112 -0
  215. package/dist/proxy/sse-parser.js.map +1 -0
  216. package/dist/proxy/system-instruction.d.ts +19 -0
  217. package/dist/proxy/system-instruction.d.ts.map +1 -0
  218. package/dist/proxy/system-instruction.js +33 -0
  219. package/dist/proxy/system-instruction.js.map +1 -0
  220. package/dist/proxy/tool-loop-stream.d.ts +7 -0
  221. package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
  222. package/dist/proxy/tool-loop-stream.js +65 -0
  223. package/dist/proxy/tool-loop-stream.js.map +1 -0
  224. package/dist/proxy/types.d.ts +138 -0
  225. package/dist/proxy/types.d.ts.map +1 -0
  226. package/dist/proxy/types.js +5 -0
  227. package/dist/proxy/types.js.map +1 -0
  228. package/dist/proxy/wrap-client.d.ts +47 -0
  229. package/dist/proxy/wrap-client.d.ts.map +1 -0
  230. package/dist/proxy/wrap-client.js +70 -0
  231. package/dist/proxy/wrap-client.js.map +1 -0
  232. package/dist/recognizers/address.d.ts +2 -0
  233. package/dist/recognizers/address.d.ts.map +1 -0
  234. package/dist/recognizers/address.js +23 -0
  235. package/dist/recognizers/address.js.map +1 -0
  236. package/dist/recognizers/base.d.ts +78 -0
  237. package/dist/recognizers/base.d.ts.map +1 -0
  238. package/dist/recognizers/base.js +100 -0
  239. package/dist/recognizers/base.js.map +1 -0
  240. package/dist/recognizers/bic-swift.d.ts +10 -0
  241. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  242. package/dist/recognizers/bic-swift.js +107 -0
  243. package/dist/recognizers/bic-swift.js.map +1 -0
  244. package/dist/recognizers/credit-card.d.ts +32 -0
  245. package/dist/recognizers/credit-card.d.ts.map +1 -0
  246. package/dist/recognizers/credit-card.js +160 -0
  247. package/dist/recognizers/credit-card.js.map +1 -0
  248. package/dist/recognizers/custom-id.d.ts +28 -0
  249. package/dist/recognizers/custom-id.d.ts.map +1 -0
  250. package/dist/recognizers/custom-id.js +116 -0
  251. package/dist/recognizers/custom-id.js.map +1 -0
  252. package/dist/recognizers/date.d.ts +10 -0
  253. package/dist/recognizers/date.d.ts.map +1 -0
  254. package/dist/recognizers/date.js +228 -0
  255. package/dist/recognizers/date.js.map +1 -0
  256. package/dist/recognizers/email.d.ts +10 -0
  257. package/dist/recognizers/email.d.ts.map +1 -0
  258. package/dist/recognizers/email.js +75 -0
  259. package/dist/recognizers/email.js.map +1 -0
  260. package/dist/recognizers/iban.d.ts +14 -0
  261. package/dist/recognizers/iban.d.ts.map +1 -0
  262. package/dist/recognizers/iban.js +67 -0
  263. package/dist/recognizers/iban.js.map +1 -0
  264. package/dist/recognizers/index.d.ts +25 -0
  265. package/dist/recognizers/index.d.ts.map +1 -0
  266. package/dist/recognizers/index.js +53 -0
  267. package/dist/recognizers/index.js.map +1 -0
  268. package/dist/recognizers/ip-address.d.ts +14 -0
  269. package/dist/recognizers/ip-address.d.ts.map +1 -0
  270. package/dist/recognizers/ip-address.js +183 -0
  271. package/dist/recognizers/ip-address.js.map +1 -0
  272. package/dist/recognizers/phone.d.ts +10 -0
  273. package/dist/recognizers/phone.d.ts.map +1 -0
  274. package/dist/recognizers/phone.js +145 -0
  275. package/dist/recognizers/phone.js.map +1 -0
  276. package/dist/recognizers/postal-code.d.ts +16 -0
  277. package/dist/recognizers/postal-code.d.ts.map +1 -0
  278. package/dist/recognizers/postal-code.js +42 -0
  279. package/dist/recognizers/postal-code.js.map +1 -0
  280. package/dist/recognizers/registry.d.ts +59 -0
  281. package/dist/recognizers/registry.d.ts.map +1 -0
  282. package/dist/recognizers/registry.js +113 -0
  283. package/dist/recognizers/registry.js.map +1 -0
  284. package/dist/recognizers/secrets/api-key.d.ts +6 -0
  285. package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
  286. package/dist/recognizers/secrets/api-key.js +40 -0
  287. package/dist/recognizers/secrets/api-key.js.map +1 -0
  288. package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
  289. package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
  290. package/dist/recognizers/secrets/aws-credentials.js +68 -0
  291. package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
  292. package/dist/recognizers/secrets/config-secret.d.ts +8 -0
  293. package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
  294. package/dist/recognizers/secrets/config-secret.js +59 -0
  295. package/dist/recognizers/secrets/config-secret.js.map +1 -0
  296. package/dist/recognizers/secrets/connection-string.d.ts +6 -0
  297. package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
  298. package/dist/recognizers/secrets/connection-string.js +40 -0
  299. package/dist/recognizers/secrets/connection-string.js.map +1 -0
  300. package/dist/recognizers/secrets/env-var.d.ts +8 -0
  301. package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
  302. package/dist/recognizers/secrets/env-var.js +54 -0
  303. package/dist/recognizers/secrets/env-var.js.map +1 -0
  304. package/dist/recognizers/secrets/index.d.ts +22 -0
  305. package/dist/recognizers/secrets/index.d.ts.map +1 -0
  306. package/dist/recognizers/secrets/index.js +41 -0
  307. package/dist/recognizers/secrets/index.js.map +1 -0
  308. package/dist/recognizers/secrets/jwt.d.ts +6 -0
  309. package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
  310. package/dist/recognizers/secrets/jwt.js +47 -0
  311. package/dist/recognizers/secrets/jwt.js.map +1 -0
  312. package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
  313. package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
  314. package/dist/recognizers/secrets/key-patterns.js +15 -0
  315. package/dist/recognizers/secrets/key-patterns.js.map +1 -0
  316. package/dist/recognizers/secrets/literal-value.d.ts +10 -0
  317. package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
  318. package/dist/recognizers/secrets/literal-value.js +48 -0
  319. package/dist/recognizers/secrets/literal-value.js.map +1 -0
  320. package/dist/recognizers/secrets/private-key.d.ts +6 -0
  321. package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
  322. package/dist/recognizers/secrets/private-key.js +16 -0
  323. package/dist/recognizers/secrets/private-key.js.map +1 -0
  324. package/dist/recognizers/url.d.ts +14 -0
  325. package/dist/recognizers/url.d.ts.map +1 -0
  326. package/dist/recognizers/url.js +121 -0
  327. package/dist/recognizers/url.js.map +1 -0
  328. package/dist/storage/browser.d.ts +13 -0
  329. package/dist/storage/browser.d.ts.map +1 -0
  330. package/dist/storage/browser.js +13 -0
  331. package/dist/storage/browser.js.map +1 -0
  332. package/dist/storage/in-memory.d.ts +60 -0
  333. package/dist/storage/in-memory.d.ts.map +1 -0
  334. package/dist/storage/in-memory.js +108 -0
  335. package/dist/storage/in-memory.js.map +1 -0
  336. package/dist/storage/index.d.ts +11 -0
  337. package/dist/storage/index.d.ts.map +1 -0
  338. package/dist/storage/index.js +11 -0
  339. package/dist/storage/index.js.map +1 -0
  340. package/dist/storage/indexeddb.d.ts +69 -0
  341. package/dist/storage/indexeddb.d.ts.map +1 -0
  342. package/dist/storage/indexeddb.js +274 -0
  343. package/dist/storage/indexeddb.js.map +1 -0
  344. package/dist/storage/session-base.d.ts +34 -0
  345. package/dist/storage/session-base.d.ts.map +1 -0
  346. package/dist/storage/session-base.js +122 -0
  347. package/dist/storage/session-base.js.map +1 -0
  348. package/dist/storage/session.d.ts +19 -0
  349. package/dist/storage/session.d.ts.map +1 -0
  350. package/dist/storage/session.js +31 -0
  351. package/dist/storage/session.js.map +1 -0
  352. package/dist/storage/sqlite.d.ts +80 -0
  353. package/dist/storage/sqlite.d.ts.map +1 -0
  354. package/dist/storage/sqlite.js +255 -0
  355. package/dist/storage/sqlite.js.map +1 -0
  356. package/dist/storage/types.d.ts +208 -0
  357. package/dist/storage/types.d.ts.map +1 -0
  358. package/dist/storage/types.js +6 -0
  359. package/dist/storage/types.js.map +1 -0
  360. package/dist/streaming/anonymizer-stream.d.ts +63 -0
  361. package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
  362. package/dist/streaming/anonymizer-stream.js +184 -0
  363. package/dist/streaming/anonymizer-stream.js.map +1 -0
  364. package/dist/streaming/index.d.ts +9 -0
  365. package/dist/streaming/index.d.ts.map +1 -0
  366. package/dist/streaming/index.js +8 -0
  367. package/dist/streaming/index.js.map +1 -0
  368. package/dist/streaming/sentence-buffer.d.ts +78 -0
  369. package/dist/streaming/sentence-buffer.d.ts.map +1 -0
  370. package/dist/streaming/sentence-buffer.js +239 -0
  371. package/dist/streaming/sentence-buffer.js.map +1 -0
  372. package/dist/streaming/stream-factory.d.ts +38 -0
  373. package/dist/streaming/stream-factory.d.ts.map +1 -0
  374. package/dist/streaming/stream-factory.js +69 -0
  375. package/dist/streaming/stream-factory.js.map +1 -0
  376. package/dist/streaming/types.d.ts +121 -0
  377. package/dist/streaming/types.d.ts.map +1 -0
  378. package/dist/streaming/types.js +5 -0
  379. package/dist/streaming/types.js.map +1 -0
  380. package/dist/types/index.d.ts +269 -0
  381. package/dist/types/index.d.ts.map +1 -0
  382. package/dist/types/index.js +95 -0
  383. package/dist/types/index.js.map +1 -0
  384. package/dist/types/pii-types.d.ts +64 -0
  385. package/dist/types/pii-types.d.ts.map +1 -0
  386. package/dist/types/pii-types.js +153 -0
  387. package/dist/types/pii-types.js.map +1 -0
  388. package/dist/utils/iban-checksum.d.ts +23 -0
  389. package/dist/utils/iban-checksum.d.ts.map +1 -0
  390. package/dist/utils/iban-checksum.js +106 -0
  391. package/dist/utils/iban-checksum.js.map +1 -0
  392. package/dist/utils/index.d.ts +11 -0
  393. package/dist/utils/index.d.ts.map +1 -0
  394. package/dist/utils/index.js +11 -0
  395. package/dist/utils/index.js.map +1 -0
  396. package/dist/utils/json-walk.d.ts +21 -0
  397. package/dist/utils/json-walk.d.ts.map +1 -0
  398. package/dist/utils/json-walk.js +44 -0
  399. package/dist/utils/json-walk.js.map +1 -0
  400. package/dist/utils/luhn.d.ts +17 -0
  401. package/dist/utils/luhn.d.ts.map +1 -0
  402. package/dist/utils/luhn.js +55 -0
  403. package/dist/utils/luhn.js.map +1 -0
  404. package/dist/utils/offsets.d.ts +86 -0
  405. package/dist/utils/offsets.d.ts.map +1 -0
  406. package/dist/utils/offsets.js +124 -0
  407. package/dist/utils/offsets.js.map +1 -0
  408. package/dist/utils/path.d.ts +34 -0
  409. package/dist/utils/path.d.ts.map +1 -0
  410. package/dist/utils/path.js +96 -0
  411. package/dist/utils/path.js.map +1 -0
  412. package/dist/utils/regex.d.ts +11 -0
  413. package/dist/utils/regex.d.ts.map +1 -0
  414. package/dist/utils/regex.js +14 -0
  415. package/dist/utils/regex.js.map +1 -0
  416. package/dist/utils/storage-browser.d.ts +51 -0
  417. package/dist/utils/storage-browser.d.ts.map +1 -0
  418. package/dist/utils/storage-browser.js +381 -0
  419. package/dist/utils/storage-browser.js.map +1 -0
  420. package/dist/utils/storage-node.d.ts +51 -0
  421. package/dist/utils/storage-node.d.ts.map +1 -0
  422. package/dist/utils/storage-node.js +153 -0
  423. package/dist/utils/storage-node.js.map +1 -0
  424. package/dist/utils/storage.browser.d.ts +75 -0
  425. package/dist/utils/storage.browser.d.ts.map +1 -0
  426. package/dist/utils/storage.browser.js +69 -0
  427. package/dist/utils/storage.browser.js.map +1 -0
  428. package/dist/utils/storage.d.ts +73 -0
  429. package/dist/utils/storage.d.ts.map +1 -0
  430. package/dist/utils/storage.js +69 -0
  431. package/dist/utils/storage.js.map +1 -0
  432. package/package.json +148 -0
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Rehydra OpenCode Plugin — Plugin V2.
3
+ *
4
+ * Uses OpenCode Plugin V2 hooks to anonymize secrets before they reach the LLM
5
+ * and rehydrate PII tags before local tool execution:
6
+ * - session.hook("context" | "compaction" | "generate") — anonymize all request
7
+ * messages in place and inject the rehydra instruction when needed.
8
+ * - session.hook("title") — anonymize the title request messages only.
9
+ * - tool.hook("execute.before") — rehydrate PII tags in tool arguments.
10
+ * - tool.hook("execute.after") — rehydrate PII tags in completed tool results.
11
+ * - session.hook("http.response") — rehydrate PII tags in the primary answer
12
+ * body (JSON and SSE) before OpenCode renders it.
13
+ * - session.hook("experimental.ws.receive") — rehydrate PII tags in WebSocket
14
+ * frames carrying model output.
15
+ */
16
+ import { createAnonymizer } from "../core/anonymizer.js";
17
+ import { AnonymizerSessionImpl } from "../storage/session-base.js";
18
+ import { InMemoryPIIStorageProvider } from "../storage/in-memory.js";
19
+ import { InMemoryKeyProvider } from "../crypto/index.js";
20
+ import { DEFAULT_TAG_FORMAT, SECRET_PII_TYPES, createDefaultPolicy, } from "../types/index.js";
21
+ import { buildPIISystemInstruction } from "../proxy/system-instruction.js";
22
+ import { buildTagPrefix } from "../utils/regex.js";
23
+ import { githubUsernameRecognizer } from "./github-username.js";
24
+ import { protectIdentityTags } from "./identity-recognizer.js";
25
+ import { gitIdentityRecognizer } from "./git-identity.js";
26
+ import { AnonymizationState } from "./v2/anon-state.js";
27
+ import { createLogger } from "./v2/logger.js";
28
+ import { anonymizerConfigFromOptions, normalizePluginOptions, policyFromOptions, } from "./v2/options.js";
29
+ import { SessionStore } from "./v2/sessions.js";
30
+ import { registerSessionContextHook, registerSessionTitleHook, registerToolAfterHook, registerToolBeforeHook, } from "./v2/register-hooks.js";
31
+ import { InMemoryRehydrateTailStore, rehydrateHttpResponse, rehydrateWsFrame, } from "./v2/response-rehydrate.js";
32
+ /**
33
+ * Resolves the project directory from the V2 context, falling back through the
34
+ * legacy V1 fields and finally the process working directory.
35
+ */
36
+ export function directoryFromContext(ctx) {
37
+ const location = ctx.location?.directory;
38
+ if (typeof location === "string" && location.length > 0)
39
+ return location;
40
+ if (typeof ctx.directory === "string" && ctx.directory.length > 0) {
41
+ return ctx.directory;
42
+ }
43
+ if (typeof ctx.worktree === "string" && ctx.worktree.length > 0) {
44
+ return ctx.worktree;
45
+ }
46
+ return process.cwd();
47
+ }
48
+ /** Normalizes an unknown thrown value into a loggable message. */
49
+ function errorMessage(error) {
50
+ return error instanceof Error ? error.message : String(error);
51
+ }
52
+ /**
53
+ * Registers the response-side hooks that restore PII tags in model output.
54
+ *
55
+ * Both registrations are best-effort: if OpenCode does not expose a hook (or
56
+ * rejects it), the failure is logged and the remaining hooks still work.
57
+ */
58
+ async function registerResponseHooks(ctx, registrations, logger, resolveSession, responseDeps) {
59
+ try {
60
+ const httpRegistration = await ctx.session.hook("http.response", async (event) => {
61
+ try {
62
+ const session = resolveSession(event.sessionID);
63
+ await rehydrateHttpResponse(event, {
64
+ rehydrate: (input) => session.rehydrate(input),
65
+ log: logger,
66
+ sessionID: event.sessionID,
67
+ kind: event.kind,
68
+ tagPrefix: responseDeps.tagPrefix,
69
+ tagClose: responseDeps.tagClose,
70
+ tailStore: responseDeps.tailStore,
71
+ });
72
+ }
73
+ catch (error) {
74
+ logger.error("rehydra http.response hook failed", {
75
+ error: errorMessage(error),
76
+ });
77
+ }
78
+ });
79
+ registrations.push(httpRegistration);
80
+ }
81
+ catch (error) {
82
+ logger.error("failed to register rehydra http.response hook", {
83
+ error: errorMessage(error),
84
+ });
85
+ }
86
+ try {
87
+ const wsRegistration = await ctx.session.hook("experimental.ws.receive", async (event) => {
88
+ try {
89
+ const session = resolveSession(event.sessionID);
90
+ await rehydrateWsFrame(event, {
91
+ rehydrate: (input) => session.rehydrate(input),
92
+ log: logger,
93
+ sessionID: event.sessionID,
94
+ tagPrefix: responseDeps.tagPrefix,
95
+ tagClose: responseDeps.tagClose,
96
+ tailStore: responseDeps.tailStore,
97
+ });
98
+ }
99
+ catch (error) {
100
+ logger.error("rehydra experimental.ws.receive hook failed", {
101
+ error: errorMessage(error),
102
+ });
103
+ }
104
+ });
105
+ registrations.push(wsRegistration);
106
+ }
107
+ catch (error) {
108
+ logger.error("failed to register rehydra experimental.ws.receive hook", {
109
+ error: errorMessage(error),
110
+ });
111
+ }
112
+ }
113
+ /**
114
+ * Creates a Rehydra plugin for OpenCode.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // .opencode/plugins/rehydra.ts
119
+ * import { createRehydraPlugin } from "rehydra/opencode-plugin";
120
+ * export default createRehydraPlugin({
121
+ * envFiles: [".env", ".env.local"],
122
+ * });
123
+ * ```
124
+ */
125
+ export function createRehydraPlugin(options) {
126
+ return {
127
+ id: "rehydra",
128
+ async setup(ctx) {
129
+ const directory = directoryFromContext(ctx);
130
+ const logger = createLogger(ctx, "rehydra");
131
+ const registrations = [];
132
+ const tailStore = new InMemoryRehydrateTailStore();
133
+ let anonymizer;
134
+ // Releases every resource acquired by this setup. It is idempotent and
135
+ // isolates each dispose so one throwing registration cannot strand the
136
+ // others or the anonymizer. Called by the returned cleanup and by the
137
+ // failure path below.
138
+ let disposed = false;
139
+ const disposeAll = async () => {
140
+ if (disposed)
141
+ return;
142
+ disposed = true;
143
+ const pending = registrations.splice(0, registrations.length);
144
+ await Promise.all(pending.map(async (registration) => {
145
+ try {
146
+ await registration.dispose();
147
+ }
148
+ catch (error) {
149
+ logger.warn("failed to dispose rehydra hook", {
150
+ error: errorMessage(error),
151
+ });
152
+ }
153
+ }));
154
+ tailStore.clear();
155
+ if (anonymizer !== undefined) {
156
+ try {
157
+ await anonymizer.dispose();
158
+ }
159
+ catch (error) {
160
+ logger.warn("failed to dispose rehydra anonymizer", {
161
+ error: errorMessage(error),
162
+ });
163
+ }
164
+ }
165
+ };
166
+ let succeeded = false;
167
+ try {
168
+ // Constructor options (local config scripts) take precedence over
169
+ // options supplied by OpenCode itself; both are untrusted and normalized
170
+ // below.
171
+ const resolved = normalizePluginOptions({ ...ctx.options, ...options }, directory);
172
+ const anonymizerConfig = anonymizerConfigFromOptions(resolved, directory);
173
+ const tagFormat = anonymizerConfig.tagFormat ?? resolved.tagFormat ?? DEFAULT_TAG_FORMAT;
174
+ const tagPrefix = buildTagPrefix(tagFormat);
175
+ const rehydraInstruction = `<rehydra>\n${buildPIISystemInstruction(tagFormat)}\n</rehydra>`;
176
+ const keyProvider = new InMemoryKeyProvider();
177
+ const piiStorage = new InMemoryPIIStorageProvider();
178
+ const createdAnonymizer = createAnonymizer({
179
+ ...anonymizerConfig,
180
+ tagFormat,
181
+ keyProvider,
182
+ piiStorageProvider: piiStorage,
183
+ });
184
+ anonymizer = createdAnonymizer;
185
+ if (resolved.vcsIdentities === true) {
186
+ createdAnonymizer
187
+ .getRegistry()
188
+ .register(protectIdentityTags(githubUsernameRecognizer, tagFormat));
189
+ createdAnonymizer
190
+ .getRegistry()
191
+ .register(protectIdentityTags(gitIdentityRecognizer, tagFormat));
192
+ }
193
+ await createdAnonymizer.initialize();
194
+ // Base policy: URL and IP_ADDRESS disabled by default.
195
+ // `policyFromOptions` re-adds the opt-in secret types the anonymizer
196
+ // registers internally.
197
+ const disableTypes = resolved.disableTypes ?? ["URL", "IP_ADDRESS"];
198
+ const policy = policyFromOptions(resolved);
199
+ const locale = resolved.locale;
200
+ const identityPolicy = (types) => {
201
+ const defaults = createDefaultPolicy();
202
+ const configPolicy = anonymizerConfig.defaultPolicy;
203
+ const enabledTypes = new Set(policy?.enabledTypes ??
204
+ configPolicy?.enabledTypes ??
205
+ defaults.enabledTypes);
206
+ const regexEnabledTypes = new Set(policy?.regexEnabledTypes ??
207
+ configPolicy?.regexEnabledTypes ??
208
+ defaults.regexEnabledTypes);
209
+ if (anonymizerConfig.secrets?.enabled === true) {
210
+ for (const type of SECRET_PII_TYPES) {
211
+ if (!disableTypes.includes(type)) {
212
+ enabledTypes.add(type);
213
+ regexEnabledTypes.add(type);
214
+ }
215
+ }
216
+ }
217
+ for (const type of types) {
218
+ if (!disableTypes.includes(type)) {
219
+ enabledTypes.add(type);
220
+ regexEnabledTypes.add(type);
221
+ }
222
+ }
223
+ return {
224
+ ...policy,
225
+ enabledTypes,
226
+ regexEnabledTypes,
227
+ reuseIdsForRepeatedPII: true,
228
+ };
229
+ };
230
+ // One session per OpenCode session, keyed by sessionID.
231
+ const sessionStore = new SessionStore();
232
+ const resolveSession = (sessionID) => sessionStore.get(sessionID, () => new AnonymizerSessionImpl(createdAnonymizer, sessionID, piiStorage, keyProvider));
233
+ const state = new AnonymizationState();
234
+ const scrubOptions = {
235
+ locale,
236
+ policy,
237
+ vcsIdentities: resolved.vcsIdentities === true,
238
+ identityPolicy,
239
+ };
240
+ const deps = {
241
+ logger,
242
+ resolveSession,
243
+ state,
244
+ rehydraInstruction,
245
+ tagPrefix,
246
+ scrubOptions,
247
+ };
248
+ // Register each hook group independently: a rejected registration must
249
+ // not prevent the remaining groups from being installed.
250
+ const registerGroup = async (label, register) => {
251
+ try {
252
+ const registered = await register();
253
+ if (registered !== undefined) {
254
+ registrations.push(...registered);
255
+ }
256
+ }
257
+ catch (error) {
258
+ logger.error(`failed to register rehydra ${label} hooks`, {
259
+ error: errorMessage(error),
260
+ });
261
+ }
262
+ };
263
+ await registerGroup("session context", () => registerSessionContextHook(ctx, deps));
264
+ await registerGroup("session title", () => registerSessionTitleHook(ctx, deps));
265
+ await registerGroup("tool execute.before", () => registerToolBeforeHook(ctx, deps));
266
+ await registerGroup("tool execute.after", () => registerToolAfterHook(ctx, deps));
267
+ // Response hooks restore the real values in model output before
268
+ // OpenCode renders them. Registration is best-effort: an unavailable
269
+ // hook must not prevent the plugin (and OpenCode) from starting.
270
+ await registerGroup("response", () => registerResponseHooks(ctx, registrations, logger, resolveSession, {
271
+ tagPrefix,
272
+ tagClose: tagFormat.close,
273
+ tailStore,
274
+ }));
275
+ logger.info("plugin initialized", {
276
+ envFiles: anonymizerConfig.secrets?.envFiles,
277
+ redactValueCount: resolved.redactValues?.length ?? 0,
278
+ disableTypes,
279
+ });
280
+ succeeded = true;
281
+ return disposeAll;
282
+ }
283
+ finally {
284
+ if (!succeeded) {
285
+ await disposeAll();
286
+ }
287
+ }
288
+ },
289
+ };
290
+ }
291
+ /** Default plugin instance used by `opencode.json`. */
292
+ export const plugin = createRehydraPlugin();
293
+ export default plugin;
294
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/opencode-plugin/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * OpenCode Plugin Configuration Types
3
+ */
4
+ import type { AnonymizerConfig } from "../core/anonymizer.js";
5
+ import type { AnonymizationPolicy, TagFormat } from "../types/index.js";
6
+ import type { PIIType } from "../types/pii-types.js";
7
+ /** PII type names as strings, for convenience in plugin config */
8
+ export type PIITypeName = `${PIIType}`;
9
+ /**
10
+ * Configuration options for the Rehydra OpenCode plugin.
11
+ */
12
+ export interface RehydraPluginOptions {
13
+ /** Paths/globs relative to the OpenCode project directory. Defaults to recursive .env discovery.
14
+ * Skips node_modules, .git, and symlinks. Pass [] to disable file loading. */
15
+ envFiles?: string[];
16
+ /** Explicit values to always redact */
17
+ redactValues?: string[];
18
+ /** Minimum value length to consider as a secret (default: 4) */
19
+ minValueLength?: number;
20
+ /** PII types to disable (default: ["URL", "IP_ADDRESS"]). Pass [] to enable all types. */
21
+ disableTypes?: PIITypeName[];
22
+ /** Locale hint for anonymization */
23
+ locale?: string;
24
+ /** Redact identities found in Git and GitHub CLI output */
25
+ vcsIdentities?: boolean;
26
+ /** Policy overrides */
27
+ policy?: Partial<AnonymizationPolicy>;
28
+ /** Advanced: full anonymizer config (overrides envFiles/redactValues/minValueLength) */
29
+ anonymizer?: AnonymizerConfig;
30
+ /** Tag format configuration (shorthand — also available via anonymizer.tagFormat) */
31
+ tagFormat?: TagFormat;
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/opencode-plugin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG,GAAG,OAAO,EAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;kFAC8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtC,wFAAwF;IACxF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * OpenCode Plugin Configuration Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/opencode-plugin/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tracks whether any anonymization has occurred during a plugin's lifetime.
3
+ *
4
+ * The system-prompt instruction is only injected once anonymization has
5
+ * actually happened, so the flag lives outside the individual hooks.
6
+ */
7
+ export declare class AnonymizationState {
8
+ hasAnonymized: boolean;
9
+ /** Clears the flag, e.g. when a fresh plugin instance takes over. */
10
+ reset(): void;
11
+ }
12
+ //# sourceMappingURL=anon-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anon-state.d.ts","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/anon-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,aAAa,UAAS;IAEtB,qEAAqE;IACrE,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tracks whether any anonymization has occurred during a plugin's lifetime.
3
+ *
4
+ * The system-prompt instruction is only injected once anonymization has
5
+ * actually happened, so the flag lives outside the individual hooks.
6
+ */
7
+ export class AnonymizationState {
8
+ hasAnonymized = false;
9
+ /** Clears the flag, e.g. when a fresh plugin instance takes over. */
10
+ reset() {
11
+ this.hasAnonymized = false;
12
+ }
13
+ }
14
+ //# sourceMappingURL=anon-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anon-state.js","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/anon-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAC7B,aAAa,GAAG,KAAK,CAAC;IAEtB,qEAAqE;IACrE,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * PII tag rehydration for OpenCode Plugin V2 tool hooks.
3
+ */
4
+ import type { AnonymizerSessionImpl } from "../../storage/session-base.js";
5
+ /**
6
+ * Recursively rehydrate all string values containing PII tags.
7
+ * Returns a new value (for strings/arrays) or the same object mutated in-place
8
+ * (for plain objects). The in-place mutation is required because OpenCode's
9
+ * tool hooks use the original reference for execution — replacing the object
10
+ * wholesale has no effect.
11
+ */
12
+ export declare function deepRehydrate(value: unknown, session: AnonymizerSessionImpl, tagPrefix: string): Promise<unknown>;
13
+ //# sourceMappingURL=deep-rehydrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-rehydrate.d.ts","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/deep-rehydrate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAqBlB"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * PII tag rehydration for OpenCode Plugin V2 tool hooks.
3
+ */
4
+ /**
5
+ * Recursively rehydrate all string values containing PII tags.
6
+ * Returns a new value (for strings/arrays) or the same object mutated in-place
7
+ * (for plain objects). The in-place mutation is required because OpenCode's
8
+ * tool hooks use the original reference for execution — replacing the object
9
+ * wholesale has no effect.
10
+ */
11
+ export async function deepRehydrate(value, session, tagPrefix) {
12
+ if (typeof value === "string") {
13
+ if (value.includes(tagPrefix)) {
14
+ return session.rehydrate(value);
15
+ }
16
+ return value;
17
+ }
18
+ if (Array.isArray(value)) {
19
+ for (let i = 0; i < value.length; i++) {
20
+ value[i] = await deepRehydrate(value[i], session, tagPrefix);
21
+ }
22
+ return value;
23
+ }
24
+ if (value !== null && typeof value === "object") {
25
+ const obj = value;
26
+ for (const key of Object.keys(obj)) {
27
+ obj[key] = await deepRehydrate(obj[key], session, tagPrefix);
28
+ }
29
+ return obj;
30
+ }
31
+ return value;
32
+ }
33
+ //# sourceMappingURL=deep-rehydrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-rehydrate.js","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/deep-rehydrate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAc,EACd,OAA8B,EAC9B,SAAiB;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,KAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,KAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * V2 OpenCode plugin shared helpers.
3
+ *
4
+ * Barrel export so the plugin entry point can import every helper from a
5
+ * single path.
6
+ */
7
+ export * from "./types.js";
8
+ export * from "./logger.js";
9
+ export * from "./options.js";
10
+ export * from "./sessions.js";
11
+ export * from "./anon-state.js";
12
+ export * from "./deep-rehydrate.js";
13
+ export * from "./scrub-messages.js";
14
+ export * from "./register-hooks.js";
15
+ export * from "./sse.js";
16
+ export * from "./response-rehydrate.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * V2 OpenCode plugin shared helpers.
3
+ *
4
+ * Barrel export so the plugin entry point can import every helper from a
5
+ * single path.
6
+ */
7
+ export * from "./types.js";
8
+ export * from "./logger.js";
9
+ export * from "./options.js";
10
+ export * from "./sessions.js";
11
+ export * from "./anon-state.js";
12
+ export * from "./deep-rehydrate.js";
13
+ export * from "./scrub-messages.js";
14
+ export * from "./register-hooks.js";
15
+ export * from "./sse.js";
16
+ export * from "./response-rehydrate.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * OpenCode plugin logger.
3
+ *
4
+ * Accommodates both client shapes the plugin may receive:
5
+ * - V2: `ctx.client.app.log({ body: { service, level, message, extra? } })`,
6
+ * where `client` / `app` may be absent entirely.
7
+ * - V1: a raw client exposing `app.log(...)`.
8
+ *
9
+ * When no usable sink exists — or the sink throws / rejects — the message is
10
+ * emitted to `console.warn` / `console.error` so swallowed hook failures stay
11
+ * observable in development and tests.
12
+ *
13
+ * Logging is best-effort: it must never propagate into plugin hook execution.
14
+ */
15
+ import type { V2Logger } from "./types.js";
16
+ /**
17
+ * Creates a logger bound to a plugin context (or raw OpenCode client).
18
+ *
19
+ * @param source - Plugin context (`ctx.client.app.log`) or a raw client
20
+ * (`source.app.log`). Either shape may be missing.
21
+ * @param service - Service tag reported to OpenCode's log stream.
22
+ */
23
+ export declare function createLogger(source: unknown, service?: string): V2Logger;
24
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6B3C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,SAAY,GAAG,QAAQ,CAkD3E"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * OpenCode plugin logger.
3
+ *
4
+ * Accommodates both client shapes the plugin may receive:
5
+ * - V2: `ctx.client.app.log({ body: { service, level, message, extra? } })`,
6
+ * where `client` / `app` may be absent entirely.
7
+ * - V1: a raw client exposing `app.log(...)`.
8
+ *
9
+ * When no usable sink exists — or the sink throws / rejects — the message is
10
+ * emitted to `console.warn` / `console.error` so swallowed hook failures stay
11
+ * observable in development and tests.
12
+ *
13
+ * Logging is best-effort: it must never propagate into plugin hook execution.
14
+ */
15
+ /** Serializes extra context without ever throwing. */
16
+ function safeStringify(value) {
17
+ try {
18
+ return JSON.stringify(value) ?? String(value);
19
+ }
20
+ catch {
21
+ return String(value);
22
+ }
23
+ }
24
+ /**
25
+ * Creates a logger bound to a plugin context (or raw OpenCode client).
26
+ *
27
+ * @param source - Plugin context (`ctx.client.app.log`) or a raw client
28
+ * (`source.app.log`). Either shape may be missing.
29
+ * @param service - Service tag reported to OpenCode's log stream.
30
+ */
31
+ export function createLogger(source, service = "rehydra") {
32
+ const candidate = source;
33
+ const app = candidate?.client?.app ?? candidate?.app;
34
+ function fallback(level, message, extra) {
35
+ const suffix = extra === undefined ? "" : ` extra=${safeStringify(extra)}`;
36
+ const line = `service=${service} level=${level} message=${message}${suffix}`;
37
+ if (level === "error") {
38
+ // eslint-disable-next-line no-console
39
+ console.error(line);
40
+ }
41
+ else {
42
+ // eslint-disable-next-line no-console
43
+ console.warn(line);
44
+ }
45
+ }
46
+ function log(level, message, extra) {
47
+ const logFn = app?.log;
48
+ if (typeof logFn !== "function") {
49
+ fallback(level, message, extra);
50
+ return;
51
+ }
52
+ try {
53
+ const result = logFn.call(app, {
54
+ body: { service, level, message, extra },
55
+ });
56
+ if (result instanceof Promise) {
57
+ result.catch(() => {
58
+ fallback(level, message, extra);
59
+ });
60
+ }
61
+ }
62
+ catch {
63
+ fallback(level, message, extra);
64
+ }
65
+ }
66
+ return {
67
+ debug: (message, extra) => log("debug", message, extra),
68
+ info: (message, extra) => log("info", message, extra),
69
+ warn: (message, extra) => log("warn", message, extra),
70
+ error: (message, extra) => log("error", message, extra),
71
+ };
72
+ }
73
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/opencode-plugin/v2/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,sDAAsD;AACtD,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,OAAO,GAAG,SAAS;IAC/D,MAAM,SAAS,GAAG,MAA2C,CAAC;IAC9D,MAAM,GAAG,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG,CAAC;IAErD,SAAS,QAAQ,CACf,KAAe,EACf,OAAe,EACf,KAA+B;QAE/B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,WAAW,OAAO,UAAU,KAAK,YAAY,OAAO,GAAG,MAAM,EAAE,CAAC;QAC7E,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,SAAS,GAAG,CACV,KAAe,EACf,OAAe,EACf,KAA+B;QAE/B,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;aACzC,CAAC,CAAC;YACH,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBAChB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QACvD,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * OpenCode plugin option normalization.
3
+ *
4
+ * OpenCode passes plugin options as untrusted, untyped data. These helpers
5
+ * validate the shape against {@link RehydraPluginOptions}, drop unknown or
6
+ * malformed fields, apply the plugin's documented defaults, and never throw.
7
+ *
8
+ * The resolved helpers mirror the behaviour of the original plugin:
9
+ * - {@link anonymizerConfigFromOptions} defaults `secrets.envBaseDirectory` to
10
+ * the project directory.
11
+ * - {@link policyFromOptions} keeps URL/IP_ADDRESS disabled by default while
12
+ * re-adding the opt-in secret types the anonymizer enables internally.
13
+ */
14
+ import type { AnonymizerConfig } from "../../core/anonymizer.js";
15
+ import type { AnonymizationPolicy } from "../../types/index.js";
16
+ import type { RehydraPluginOptions } from "../types.js";
17
+ /**
18
+ * Validates and normalizes raw OpenCode plugin options.
19
+ *
20
+ * Unknown or malformed fields are ignored and missing fields fall back to the
21
+ * plugin defaults. When no `anonymizer` is supplied, one is derived from the
22
+ * top-level secrets fields.
23
+ *
24
+ * @param raw - Untrusted options from OpenCode configuration.
25
+ * @param ctxDirectory - Project directory, used as `secrets.envBaseDirectory`.
26
+ */
27
+ export declare function normalizePluginOptions(raw: unknown, ctxDirectory: string): RehydraPluginOptions;
28
+ /**
29
+ * Resolves the anonymizer configuration, defaulting the secrets base directory
30
+ * to the project directory when the caller did not set one.
31
+ */
32
+ export declare function anonymizerConfigFromOptions(options: RehydraPluginOptions, ctxDirectory: string): AnonymizerConfig;
33
+ /**
34
+ * Builds the policy override implied by `disableTypes`.
35
+ *
36
+ * Returns `options.policy` unchanged when nothing is disabled (or the caller
37
+ * explicitly disabled nothing), matching the original plugin behaviour.
38
+ */
39
+ export declare function policyFromOptions(options: RehydraPluginOptions): Partial<AnonymizationPolicy> | undefined;
40
+ //# sourceMappingURL=options.d.ts.map