@oscharko-dev/keiko 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +621 -0
  4. package/TRADEMARKS.md +41 -0
  5. package/dist/audit/aggregate.d.ts +5 -0
  6. package/dist/audit/aggregate.js +25 -0
  7. package/dist/audit/build.d.ts +2 -0
  8. package/dist/audit/build.js +224 -0
  9. package/dist/audit/errors.d.ts +25 -0
  10. package/dist/audit/errors.js +39 -0
  11. package/dist/audit/index-api.d.ts +14 -0
  12. package/dist/audit/index-api.js +131 -0
  13. package/dist/audit/index.d.ts +12 -0
  14. package/dist/audit/index.js +17 -0
  15. package/dist/audit/persist.d.ts +8 -0
  16. package/dist/audit/persist.js +40 -0
  17. package/dist/audit/redaction.d.ts +3 -0
  18. package/dist/audit/redaction.js +61 -0
  19. package/dist/audit/report.d.ts +18 -0
  20. package/dist/audit/report.js +50 -0
  21. package/dist/audit/retention.d.ts +3 -0
  22. package/dist/audit/retention.js +95 -0
  23. package/dist/audit/runid.d.ts +1 -0
  24. package/dist/audit/runid.js +29 -0
  25. package/dist/audit/side-file.d.ts +12 -0
  26. package/dist/audit/side-file.js +82 -0
  27. package/dist/audit/store.d.ts +12 -0
  28. package/dist/audit/store.js +198 -0
  29. package/dist/audit/types.d.ts +188 -0
  30. package/dist/audit/types.js +8 -0
  31. package/dist/audit/workflow-evidence.d.ts +27 -0
  32. package/dist/audit/workflow-evidence.js +145 -0
  33. package/dist/cli/context.d.ts +2 -0
  34. package/dist/cli/context.js +102 -0
  35. package/dist/cli/evaluate.d.ts +7 -0
  36. package/dist/cli/evaluate.js +207 -0
  37. package/dist/cli/evidence.d.ts +8 -0
  38. package/dist/cli/evidence.js +88 -0
  39. package/dist/cli/gateway-config.d.ts +10 -0
  40. package/dist/cli/gateway-config.js +12 -0
  41. package/dist/cli/gen-tests.d.ts +7 -0
  42. package/dist/cli/gen-tests.js +208 -0
  43. package/dist/cli/index.d.ts +2 -0
  44. package/dist/cli/index.js +14 -0
  45. package/dist/cli/investigate.d.ts +8 -0
  46. package/dist/cli/investigate.js +242 -0
  47. package/dist/cli/models.d.ts +3 -0
  48. package/dist/cli/models.js +64 -0
  49. package/dist/cli/run.d.ts +7 -0
  50. package/dist/cli/run.js +187 -0
  51. package/dist/cli/runner.d.ts +6 -0
  52. package/dist/cli/runner.js +83 -0
  53. package/dist/cli/ui.d.ts +31 -0
  54. package/dist/cli/ui.js +240 -0
  55. package/dist/cli/verify.d.ts +2 -0
  56. package/dist/cli/verify.js +103 -0
  57. package/dist/evaluations/fixtures/bug-investigation/happy-path.d.ts +2 -0
  58. package/dist/evaluations/fixtures/bug-investigation/happy-path.js +66 -0
  59. package/dist/evaluations/fixtures/bug-investigation/investigation-only.d.ts +2 -0
  60. package/dist/evaluations/fixtures/bug-investigation/investigation-only.js +39 -0
  61. package/dist/evaluations/fixtures/bug-investigation/unsafe-action.d.ts +2 -0
  62. package/dist/evaluations/fixtures/bug-investigation/unsafe-action.js +37 -0
  63. package/dist/evaluations/fixtures/index.d.ts +7 -0
  64. package/dist/evaluations/fixtures/index.js +35 -0
  65. package/dist/evaluations/fixtures/support.d.ts +5 -0
  66. package/dist/evaluations/fixtures/support.js +42 -0
  67. package/dist/evaluations/fixtures/unit-tests/happy-path.d.ts +2 -0
  68. package/dist/evaluations/fixtures/unit-tests/happy-path.js +40 -0
  69. package/dist/evaluations/fixtures/unit-tests/retry-then-accept.d.ts +2 -0
  70. package/dist/evaluations/fixtures/unit-tests/retry-then-accept.js +39 -0
  71. package/dist/evaluations/fixtures/unit-tests/unsafe-action.d.ts +2 -0
  72. package/dist/evaluations/fixtures/unit-tests/unsafe-action.js +32 -0
  73. package/dist/evaluations/index.d.ts +12 -0
  74. package/dist/evaluations/index.js +12 -0
  75. package/dist/evaluations/manifest-check.d.ts +1 -0
  76. package/dist/evaluations/manifest-check.js +48 -0
  77. package/dist/evaluations/model-provider.d.ts +12 -0
  78. package/dist/evaluations/model-provider.js +26 -0
  79. package/dist/evaluations/render.d.ts +2 -0
  80. package/dist/evaluations/render.js +59 -0
  81. package/dist/evaluations/runner-support.d.ts +27 -0
  82. package/dist/evaluations/runner-support.js +163 -0
  83. package/dist/evaluations/runner.d.ts +20 -0
  84. package/dist/evaluations/runner.js +174 -0
  85. package/dist/evaluations/scorer.d.ts +14 -0
  86. package/dist/evaluations/scorer.js +131 -0
  87. package/dist/evaluations/scripted-model.d.ts +6 -0
  88. package/dist/evaluations/scripted-model.js +26 -0
  89. package/dist/evaluations/surface-parity.d.ts +2 -0
  90. package/dist/evaluations/surface-parity.js +184 -0
  91. package/dist/evaluations/types.d.ts +74 -0
  92. package/dist/evaluations/types.js +16 -0
  93. package/dist/gateway/capabilities.d.ts +11 -0
  94. package/dist/gateway/capabilities.data.d.ts +2 -0
  95. package/dist/gateway/capabilities.data.js +203 -0
  96. package/dist/gateway/capabilities.js +41 -0
  97. package/dist/gateway/config.d.ts +15 -0
  98. package/dist/gateway/config.js +154 -0
  99. package/dist/gateway/errors.d.ts +72 -0
  100. package/dist/gateway/errors.js +82 -0
  101. package/dist/gateway/gateway.d.ts +19 -0
  102. package/dist/gateway/gateway.js +94 -0
  103. package/dist/gateway/index.d.ts +10 -0
  104. package/dist/gateway/index.js +11 -0
  105. package/dist/gateway/model-selection.d.ts +9 -0
  106. package/dist/gateway/model-selection.js +36 -0
  107. package/dist/gateway/normalize.d.ts +7 -0
  108. package/dist/gateway/normalize.js +93 -0
  109. package/dist/gateway/openai-adapter.d.ts +20 -0
  110. package/dist/gateway/openai-adapter.js +263 -0
  111. package/dist/gateway/redaction.d.ts +1 -0
  112. package/dist/gateway/redaction.js +51 -0
  113. package/dist/gateway/resilience.d.ts +24 -0
  114. package/dist/gateway/resilience.js +166 -0
  115. package/dist/gateway/types.d.ts +108 -0
  116. package/dist/gateway/types.js +2 -0
  117. package/dist/harness/adapters.d.ts +23 -0
  118. package/dist/harness/adapters.js +38 -0
  119. package/dist/harness/context.d.ts +33 -0
  120. package/dist/harness/context.js +21 -0
  121. package/dist/harness/emitter.d.ts +15 -0
  122. package/dist/harness/emitter.js +72 -0
  123. package/dist/harness/errors.d.ts +21 -0
  124. package/dist/harness/errors.js +39 -0
  125. package/dist/harness/executor.d.ts +3 -0
  126. package/dist/harness/executor.js +211 -0
  127. package/dist/harness/fingerprint.d.ts +6 -0
  128. package/dist/harness/fingerprint.js +43 -0
  129. package/dist/harness/index.d.ts +9 -0
  130. package/dist/harness/index.js +13 -0
  131. package/dist/harness/loop.d.ts +3 -0
  132. package/dist/harness/loop.js +159 -0
  133. package/dist/harness/patcher.d.ts +4 -0
  134. package/dist/harness/patcher.js +49 -0
  135. package/dist/harness/planner.d.ts +3 -0
  136. package/dist/harness/planner.js +21 -0
  137. package/dist/harness/ports.d.ts +61 -0
  138. package/dist/harness/ports.js +4 -0
  139. package/dist/harness/session.d.ts +25 -0
  140. package/dist/harness/session.js +116 -0
  141. package/dist/harness/sinks.d.ts +30 -0
  142. package/dist/harness/sinks.js +72 -0
  143. package/dist/harness/tasks/explain-plan.d.ts +3 -0
  144. package/dist/harness/tasks/explain-plan.js +29 -0
  145. package/dist/harness/tasks/generate-unit-tests.d.ts +3 -0
  146. package/dist/harness/tasks/generate-unit-tests.js +28 -0
  147. package/dist/harness/tasks/investigate-bug.d.ts +3 -0
  148. package/dist/harness/tasks/investigate-bug.js +31 -0
  149. package/dist/harness/tasks/policy.d.ts +11 -0
  150. package/dist/harness/tasks/policy.js +22 -0
  151. package/dist/harness/tasks/verify.d.ts +3 -0
  152. package/dist/harness/tasks/verify.js +16 -0
  153. package/dist/harness/types.d.ts +270 -0
  154. package/dist/harness/types.js +33 -0
  155. package/dist/index.d.ts +11 -0
  156. package/dist/index.js +36 -0
  157. package/dist/sdk/index.d.ts +9 -0
  158. package/dist/sdk/index.js +37 -0
  159. package/dist/sdk/run-agent.d.ts +16 -0
  160. package/dist/sdk/run-agent.js +56 -0
  161. package/dist/tools/browser/cdp-client.d.ts +35 -0
  162. package/dist/tools/browser/cdp-client.js +218 -0
  163. package/dist/tools/browser/errors.d.ts +25 -0
  164. package/dist/tools/browser/errors.js +55 -0
  165. package/dist/tools/browser/index.d.ts +5 -0
  166. package/dist/tools/browser/index.js +6 -0
  167. package/dist/tools/browser/session.d.ts +44 -0
  168. package/dist/tools/browser/session.js +748 -0
  169. package/dist/tools/browser/types.d.ts +48 -0
  170. package/dist/tools/browser/types.js +2 -0
  171. package/dist/tools/browser/validators.d.ts +5 -0
  172. package/dist/tools/browser/validators.js +97 -0
  173. package/dist/tools/errors.d.ts +59 -0
  174. package/dist/tools/errors.js +94 -0
  175. package/dist/tools/exec.d.ts +42 -0
  176. package/dist/tools/exec.js +327 -0
  177. package/dist/tools/index.d.ts +11 -0
  178. package/dist/tools/index.js +14 -0
  179. package/dist/tools/patch-content.d.ts +10 -0
  180. package/dist/tools/patch-content.js +126 -0
  181. package/dist/tools/patch-normalize.d.ts +1 -0
  182. package/dist/tools/patch-normalize.js +80 -0
  183. package/dist/tools/patch-parse.d.ts +8 -0
  184. package/dist/tools/patch-parse.js +201 -0
  185. package/dist/tools/patch.d.ts +18 -0
  186. package/dist/tools/patch.js +403 -0
  187. package/dist/tools/registry.d.ts +36 -0
  188. package/dist/tools/registry.js +231 -0
  189. package/dist/tools/sandbox.d.ts +8 -0
  190. package/dist/tools/sandbox.js +121 -0
  191. package/dist/tools/schemas.d.ts +2 -0
  192. package/dist/tools/schemas.js +51 -0
  193. package/dist/tools/terminal-policy.d.ts +9 -0
  194. package/dist/tools/terminal-policy.js +313 -0
  195. package/dist/tools/types.d.ts +99 -0
  196. package/dist/tools/types.js +103 -0
  197. package/dist/tools/writer.d.ts +7 -0
  198. package/dist/tools/writer.js +20 -0
  199. package/dist/ui/browser.d.ts +10 -0
  200. package/dist/ui/browser.js +231 -0
  201. package/dist/ui/chat-handlers.d.ts +4 -0
  202. package/dist/ui/chat-handlers.js +281 -0
  203. package/dist/ui/csp-hashes.json +17 -0
  204. package/dist/ui/csp.d.ts +2 -0
  205. package/dist/ui/csp.js +66 -0
  206. package/dist/ui/deps.d.ts +34 -0
  207. package/dist/ui/deps.js +137 -0
  208. package/dist/ui/evidence.d.ts +27 -0
  209. package/dist/ui/evidence.js +142 -0
  210. package/dist/ui/files-deny.d.ts +2 -0
  211. package/dist/ui/files-deny.js +12 -0
  212. package/dist/ui/files.d.ts +65 -0
  213. package/dist/ui/files.js +492 -0
  214. package/dist/ui/headers.d.ts +2 -0
  215. package/dist/ui/headers.js +21 -0
  216. package/dist/ui/host-check.d.ts +2 -0
  217. package/dist/ui/host-check.js +58 -0
  218. package/dist/ui/index.d.ts +20 -0
  219. package/dist/ui/index.js +23 -0
  220. package/dist/ui/load-csp.d.ts +1 -0
  221. package/dist/ui/load-csp.js +28 -0
  222. package/dist/ui/read-handlers.d.ts +8 -0
  223. package/dist/ui/read-handlers.js +247 -0
  224. package/dist/ui/routes.d.ts +36 -0
  225. package/dist/ui/routes.js +129 -0
  226. package/dist/ui/run-engine.d.ts +20 -0
  227. package/dist/ui/run-engine.js +345 -0
  228. package/dist/ui/run-handlers.d.ts +8 -0
  229. package/dist/ui/run-handlers.js +431 -0
  230. package/dist/ui/run-request.d.ts +13 -0
  231. package/dist/ui/run-request.js +219 -0
  232. package/dist/ui/runs.d.ts +43 -0
  233. package/dist/ui/runs.js +92 -0
  234. package/dist/ui/server.d.ts +11 -0
  235. package/dist/ui/server.js +143 -0
  236. package/dist/ui/sink.d.ts +27 -0
  237. package/dist/ui/sink.js +80 -0
  238. package/dist/ui/sse.d.ts +7 -0
  239. package/dist/ui/sse.js +27 -0
  240. package/dist/ui/static/404.html +1 -0
  241. package/dist/ui/static/_next/static/ca-A01hy9W98aRvMZKdAw/_buildManifest.js +1 -0
  242. package/dist/ui/static/_next/static/ca-A01hy9W98aRvMZKdAw/_ssgManifest.js +1 -0
  243. package/dist/ui/static/_next/static/chunks/255-d47fd57964443afe.js +1 -0
  244. package/dist/ui/static/_next/static/chunks/4-be1fef693af8e088.js +1 -0
  245. package/dist/ui/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +1 -0
  246. package/dist/ui/static/_next/static/chunks/app/_not-found/page-75825b09bcecad97.js +1 -0
  247. package/dist/ui/static/_next/static/chunks/app/launch/page-9c86a13c29884245.js +1 -0
  248. package/dist/ui/static/_next/static/chunks/app/layout-bdea63fe87947d50.js +1 -0
  249. package/dist/ui/static/_next/static/chunks/app/page-4168c12c68b7a853.js +1 -0
  250. package/dist/ui/static/_next/static/chunks/framework-a6e0b7e30f98059a.js +1 -0
  251. package/dist/ui/static/_next/static/chunks/main-778a50aebff02192.js +1 -0
  252. package/dist/ui/static/_next/static/chunks/main-app-30679af7240d63e9.js +1 -0
  253. package/dist/ui/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +1 -0
  254. package/dist/ui/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +1 -0
  255. package/dist/ui/static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  256. package/dist/ui/static/_next/static/chunks/webpack-4a462cecab786e93.js +1 -0
  257. package/dist/ui/static/_next/static/css/be7cb54d5c5673b6.css +1 -0
  258. package/dist/ui/static/assets/editors/goland.svg +35 -0
  259. package/dist/ui/static/assets/editors/intellij.svg +39 -0
  260. package/dist/ui/static/assets/editors/pycharm.svg +58 -0
  261. package/dist/ui/static/assets/editors/rustrover.svg +19 -0
  262. package/dist/ui/static/assets/editors/vscode.svg +1 -0
  263. package/dist/ui/static/assets/editors/webstorm.svg +21 -0
  264. package/dist/ui/static/assets/icons/anthropic.svg +1 -0
  265. package/dist/ui/static/assets/icons/brave.svg +1 -0
  266. package/dist/ui/static/assets/icons/css3.svg +1 -0
  267. package/dist/ui/static/assets/icons/docker.svg +1 -0
  268. package/dist/ui/static/assets/icons/git.svg +1 -0
  269. package/dist/ui/static/assets/icons/github.svg +1 -0
  270. package/dist/ui/static/assets/icons/go.svg +1 -0
  271. package/dist/ui/static/assets/icons/gradle.svg +1 -0
  272. package/dist/ui/static/assets/icons/grafana.svg +1 -0
  273. package/dist/ui/static/assets/icons/graphql.svg +1 -0
  274. package/dist/ui/static/assets/icons/html5.svg +1 -0
  275. package/dist/ui/static/assets/icons/image.svg +1 -0
  276. package/dist/ui/static/assets/icons/java.svg +1 -0
  277. package/dist/ui/static/assets/icons/javascript.svg +1 -0
  278. package/dist/ui/static/assets/icons/json.svg +1 -0
  279. package/dist/ui/static/assets/icons/kafka.svg +1 -0
  280. package/dist/ui/static/assets/icons/kubernetes.svg +1 -0
  281. package/dist/ui/static/assets/icons/linear.svg +1 -0
  282. package/dist/ui/static/assets/icons/markdown.svg +1 -0
  283. package/dist/ui/static/assets/icons/nginx.svg +1 -0
  284. package/dist/ui/static/assets/icons/nodejs.svg +1 -0
  285. package/dist/ui/static/assets/icons/notion.svg +1 -0
  286. package/dist/ui/static/assets/icons/openai.svg +1 -0
  287. package/dist/ui/static/assets/icons/playwright.svg +1 -0
  288. package/dist/ui/static/assets/icons/postgresql.svg +1 -0
  289. package/dist/ui/static/assets/icons/prometheus.svg +1 -0
  290. package/dist/ui/static/assets/icons/properties.svg +1 -0
  291. package/dist/ui/static/assets/icons/puppeteer.svg +1 -0
  292. package/dist/ui/static/assets/icons/python.svg +1 -0
  293. package/dist/ui/static/assets/icons/react.svg +1 -0
  294. package/dist/ui/static/assets/icons/redis.svg +1 -0
  295. package/dist/ui/static/assets/icons/rust.svg +1 -0
  296. package/dist/ui/static/assets/icons/sentry.svg +1 -0
  297. package/dist/ui/static/assets/icons/slack.svg +1 -0
  298. package/dist/ui/static/assets/icons/spring.svg +1 -0
  299. package/dist/ui/static/assets/icons/typescript.svg +1 -0
  300. package/dist/ui/static/assets/icons/upstash.svg +1 -0
  301. package/dist/ui/static/assets/icons/yaml.svg +1 -0
  302. package/dist/ui/static/assets/keiko-logo.svg +10 -0
  303. package/dist/ui/static/index.html +1 -0
  304. package/dist/ui/static/index.txt +19 -0
  305. package/dist/ui/static/keiko-logo.svg +10 -0
  306. package/dist/ui/static/launch.html +1 -0
  307. package/dist/ui/static/launch.txt +19 -0
  308. package/dist/ui/static.d.ts +3 -0
  309. package/dist/ui/static.js +72 -0
  310. package/dist/ui/store/chats.d.ts +14 -0
  311. package/dist/ui/store/chats.js +110 -0
  312. package/dist/ui/store/db.d.ts +6 -0
  313. package/dist/ui/store/db.js +182 -0
  314. package/dist/ui/store/errors.d.ts +12 -0
  315. package/dist/ui/store/errors.js +30 -0
  316. package/dist/ui/store/index.d.ts +6 -0
  317. package/dist/ui/store/index.js +6 -0
  318. package/dist/ui/store/messages.d.ts +5 -0
  319. package/dist/ui/store/messages.js +137 -0
  320. package/dist/ui/store/paths.d.ts +4 -0
  321. package/dist/ui/store/paths.js +69 -0
  322. package/dist/ui/store/projects.d.ts +7 -0
  323. package/dist/ui/store/projects.js +61 -0
  324. package/dist/ui/store/schema.d.ts +3 -0
  325. package/dist/ui/store/schema.js +77 -0
  326. package/dist/ui/store/types.d.ts +80 -0
  327. package/dist/ui/store/types.js +3 -0
  328. package/dist/ui/store/validation.d.ts +4 -0
  329. package/dist/ui/store/validation.js +72 -0
  330. package/dist/ui/store-handlers.d.ts +16 -0
  331. package/dist/ui/store-handlers.js +465 -0
  332. package/dist/ui/terminal-errors.d.ts +21 -0
  333. package/dist/ui/terminal-errors.js +45 -0
  334. package/dist/ui/terminal-evidence.d.ts +20 -0
  335. package/dist/ui/terminal-evidence.js +65 -0
  336. package/dist/ui/terminal-routes.d.ts +9 -0
  337. package/dist/ui/terminal-routes.js +219 -0
  338. package/dist/ui/terminal.d.ts +67 -0
  339. package/dist/ui/terminal.js +835 -0
  340. package/dist/verification/classify.d.ts +10 -0
  341. package/dist/verification/classify.js +53 -0
  342. package/dist/verification/detect.d.ts +4 -0
  343. package/dist/verification/detect.js +81 -0
  344. package/dist/verification/errors.d.ts +11 -0
  345. package/dist/verification/errors.js +21 -0
  346. package/dist/verification/index.d.ts +17 -0
  347. package/dist/verification/index.js +13 -0
  348. package/dist/verification/limits.d.ts +3 -0
  349. package/dist/verification/limits.js +40 -0
  350. package/dist/verification/monitor.d.ts +4 -0
  351. package/dist/verification/monitor.js +58 -0
  352. package/dist/verification/orchestrator.d.ts +16 -0
  353. package/dist/verification/orchestrator.js +363 -0
  354. package/dist/verification/plan.d.ts +9 -0
  355. package/dist/verification/plan.js +125 -0
  356. package/dist/verification/summary.d.ts +40 -0
  357. package/dist/verification/summary.js +67 -0
  358. package/dist/verification/types.d.ts +63 -0
  359. package/dist/verification/types.js +13 -0
  360. package/dist/workflows/bug-investigation/context.d.ts +7 -0
  361. package/dist/workflows/bug-investigation/context.js +119 -0
  362. package/dist/workflows/bug-investigation/descriptor.d.ts +3 -0
  363. package/dist/workflows/bug-investigation/descriptor.js +46 -0
  364. package/dist/workflows/bug-investigation/emit.d.ts +12 -0
  365. package/dist/workflows/bug-investigation/emit.js +35 -0
  366. package/dist/workflows/bug-investigation/events.d.ts +81 -0
  367. package/dist/workflows/bug-investigation/events.js +9 -0
  368. package/dist/workflows/bug-investigation/failure-parse.d.ts +3 -0
  369. package/dist/workflows/bug-investigation/failure-parse.js +154 -0
  370. package/dist/workflows/bug-investigation/guard.d.ts +2 -0
  371. package/dist/workflows/bug-investigation/guard.js +69 -0
  372. package/dist/workflows/bug-investigation/index.d.ts +7 -0
  373. package/dist/workflows/bug-investigation/index.js +13 -0
  374. package/dist/workflows/bug-investigation/internal.d.ts +37 -0
  375. package/dist/workflows/bug-investigation/internal.js +64 -0
  376. package/dist/workflows/bug-investigation/model-loop.d.ts +4 -0
  377. package/dist/workflows/bug-investigation/model-loop.js +223 -0
  378. package/dist/workflows/bug-investigation/parse.d.ts +3 -0
  379. package/dist/workflows/bug-investigation/parse.js +123 -0
  380. package/dist/workflows/bug-investigation/prompt.d.ts +4 -0
  381. package/dist/workflows/bug-investigation/prompt.js +107 -0
  382. package/dist/workflows/bug-investigation/report.d.ts +23 -0
  383. package/dist/workflows/bug-investigation/report.js +151 -0
  384. package/dist/workflows/bug-investigation/stages.d.ts +13 -0
  385. package/dist/workflows/bug-investigation/stages.js +242 -0
  386. package/dist/workflows/bug-investigation/types.d.ts +91 -0
  387. package/dist/workflows/bug-investigation/types.js +14 -0
  388. package/dist/workflows/bug-investigation/verify-stage.d.ts +10 -0
  389. package/dist/workflows/bug-investigation/verify-stage.js +91 -0
  390. package/dist/workflows/bug-investigation/workflow.d.ts +2 -0
  391. package/dist/workflows/bug-investigation/workflow.js +74 -0
  392. package/dist/workflows/descriptor.d.ts +20 -0
  393. package/dist/workflows/descriptor.js +8 -0
  394. package/dist/workflows/index.d.ts +3 -0
  395. package/dist/workflows/index.js +2 -0
  396. package/dist/workflows/unit-tests/context.d.ts +7 -0
  397. package/dist/workflows/unit-tests/context.js +129 -0
  398. package/dist/workflows/unit-tests/conventions.d.ts +4 -0
  399. package/dist/workflows/unit-tests/conventions.js +87 -0
  400. package/dist/workflows/unit-tests/descriptor.d.ts +4 -0
  401. package/dist/workflows/unit-tests/descriptor.js +43 -0
  402. package/dist/workflows/unit-tests/emit.d.ts +12 -0
  403. package/dist/workflows/unit-tests/emit.js +35 -0
  404. package/dist/workflows/unit-tests/events.d.ts +78 -0
  405. package/dist/workflows/unit-tests/events.js +7 -0
  406. package/dist/workflows/unit-tests/index.d.ts +6 -0
  407. package/dist/workflows/unit-tests/index.js +10 -0
  408. package/dist/workflows/unit-tests/internal.d.ts +35 -0
  409. package/dist/workflows/unit-tests/internal.js +43 -0
  410. package/dist/workflows/unit-tests/model-loop.d.ts +4 -0
  411. package/dist/workflows/unit-tests/model-loop.js +95 -0
  412. package/dist/workflows/unit-tests/parse.d.ts +6 -0
  413. package/dist/workflows/unit-tests/parse.js +68 -0
  414. package/dist/workflows/unit-tests/prompt.d.ts +4 -0
  415. package/dist/workflows/unit-tests/prompt.js +71 -0
  416. package/dist/workflows/unit-tests/report.d.ts +21 -0
  417. package/dist/workflows/unit-tests/report.js +90 -0
  418. package/dist/workflows/unit-tests/stages.d.ts +9 -0
  419. package/dist/workflows/unit-tests/stages.js +155 -0
  420. package/dist/workflows/unit-tests/types.d.ts +70 -0
  421. package/dist/workflows/unit-tests/types.js +11 -0
  422. package/dist/workflows/unit-tests/verify-stage.d.ts +9 -0
  423. package/dist/workflows/unit-tests/verify-stage.js +56 -0
  424. package/dist/workflows/unit-tests/workflow.d.ts +2 -0
  425. package/dist/workflows/unit-tests/workflow.js +58 -0
  426. package/dist/workspace/contextPack.d.ts +9 -0
  427. package/dist/workspace/contextPack.js +94 -0
  428. package/dist/workspace/detect.d.ts +3 -0
  429. package/dist/workspace/detect.js +135 -0
  430. package/dist/workspace/discovery.d.ts +9 -0
  431. package/dist/workspace/discovery.js +167 -0
  432. package/dist/workspace/errors.d.ts +39 -0
  433. package/dist/workspace/errors.js +66 -0
  434. package/dist/workspace/fs.d.ts +21 -0
  435. package/dist/workspace/fs.js +36 -0
  436. package/dist/workspace/ignore.d.ts +14 -0
  437. package/dist/workspace/ignore.js +176 -0
  438. package/dist/workspace/index.d.ts +11 -0
  439. package/dist/workspace/index.js +13 -0
  440. package/dist/workspace/paths.d.ts +2 -0
  441. package/dist/workspace/paths.js +38 -0
  442. package/dist/workspace/realpath.d.ts +7 -0
  443. package/dist/workspace/realpath.js +72 -0
  444. package/dist/workspace/retrieval.d.ts +9 -0
  445. package/dist/workspace/retrieval.js +74 -0
  446. package/dist/workspace/summary.d.ts +3 -0
  447. package/dist/workspace/summary.js +54 -0
  448. package/dist/workspace/types.d.ts +103 -0
  449. package/dist/workspace/types.js +27 -0
  450. package/package.json +58 -0
@@ -0,0 +1,218 @@
1
+ // Thin CDP JSON-RPC client over the existing `ws` runtime dep (ADR-0017 D1, D4). NOT a
2
+ // general-purpose CDP library: a hard-coded permit list gates `send` so a server bug cannot send
3
+ // `Runtime.evaluate` or any cookie-reading method. Pending requests are correlated by an
4
+ // incrementing integer `id`; the in-process id allocator is private so a CDP response cannot spoof
5
+ // the id of a request it didn't trigger.
6
+ import { WebSocket } from "ws";
7
+ import { BrowserToolError } from "./errors.js";
8
+ // ADR-0017 D4 — exact permit list. New methods require an ADR amendment, not a code-only patch.
9
+ export const PERMITTED_CDP_METHODS = new Set([
10
+ "Target.createTarget",
11
+ "Target.attachToTarget",
12
+ "Target.closeTarget",
13
+ "Page.enable",
14
+ "Page.navigate",
15
+ "Page.stopLoading",
16
+ "Page.captureScreenshot",
17
+ "DOM.getDocument",
18
+ "DOM.getOuterHTML",
19
+ "Browser.getVersion",
20
+ ]);
21
+ const DEFAULT_CDP_TIMEOUT_MS = 10_000;
22
+ function isCdpFrame(value) {
23
+ if (typeof value !== "object" || value === null)
24
+ return false;
25
+ const rec = value;
26
+ return typeof rec.id === "number" || typeof rec.method === "string";
27
+ }
28
+ function parseCdpText(text) {
29
+ let parsed;
30
+ try {
31
+ parsed = JSON.parse(text);
32
+ }
33
+ catch {
34
+ return undefined;
35
+ }
36
+ return isCdpFrame(parsed) ? parsed : undefined;
37
+ }
38
+ function rawDataToText(data) {
39
+ if (typeof data === "string")
40
+ return data;
41
+ if (Buffer.isBuffer(data))
42
+ return data.toString("utf8");
43
+ if (Array.isArray(data))
44
+ return Buffer.concat(data).toString("utf8");
45
+ return Buffer.from(data).toString("utf8");
46
+ }
47
+ export class CdpClient {
48
+ socket;
49
+ timeoutMs;
50
+ pending = new Map();
51
+ listeners = new Set();
52
+ closeListeners = new Set();
53
+ nextId = 1;
54
+ connectPromise;
55
+ closed = false;
56
+ closeReason;
57
+ constructor(url, options = {}) {
58
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_CDP_TIMEOUT_MS;
59
+ const factory = options.socketFactory ?? ((target) => new WebSocket(target));
60
+ this.socket = factory(url);
61
+ this.socket.on("message", (data, isBinary) => {
62
+ this.handleMessage(data, isBinary);
63
+ });
64
+ this.socket.on("close", () => {
65
+ this.handleSocketClosed("chrome-disconnected");
66
+ });
67
+ this.socket.on("error", () => {
68
+ this.handleSocketClosed("chrome-disconnected");
69
+ });
70
+ }
71
+ connect() {
72
+ if (this.connectPromise !== undefined)
73
+ return this.connectPromise;
74
+ this.connectPromise = new Promise((resolve, reject) => {
75
+ if (this.socket.readyState === this.socket.OPEN) {
76
+ resolve();
77
+ return;
78
+ }
79
+ const timer = setTimeout(() => {
80
+ reject(new BrowserToolError("CDP_TIMEOUT", "CDP connection did not open in time."));
81
+ }, this.timeoutMs);
82
+ this.socket.once("open", () => {
83
+ clearTimeout(timer);
84
+ resolve();
85
+ });
86
+ this.socket.once("error", (err) => {
87
+ clearTimeout(timer);
88
+ reject(new BrowserToolError("CHROME_UNREACHABLE", `CDP connection failed: ${err.message}`));
89
+ });
90
+ });
91
+ return this.connectPromise;
92
+ }
93
+ onEvent(listener) {
94
+ this.listeners.add(listener);
95
+ return () => {
96
+ this.listeners.delete(listener);
97
+ };
98
+ }
99
+ onClose(listener) {
100
+ this.closeListeners.add(listener);
101
+ return () => {
102
+ this.closeListeners.delete(listener);
103
+ };
104
+ }
105
+ async send(method, params = {}, sessionId) {
106
+ if (!PERMITTED_CDP_METHODS.has(method)) {
107
+ throw new BrowserToolError("CDP_METHOD_FORBIDDEN", "The requested CDP method is not permitted.");
108
+ }
109
+ if (this.closed) {
110
+ throw new BrowserToolError("TARGET_CLOSED", "CDP connection is closed.");
111
+ }
112
+ await this.connect();
113
+ const id = this.nextId;
114
+ this.nextId += 1;
115
+ return new Promise((resolve, reject) => {
116
+ const timer = setTimeout(() => {
117
+ this.pending.delete(id);
118
+ reject(new BrowserToolError("CDP_TIMEOUT", "CDP response did not arrive in time."));
119
+ }, this.timeoutMs);
120
+ this.pending.set(id, {
121
+ resolve: (value) => {
122
+ resolve(value);
123
+ },
124
+ reject,
125
+ timer,
126
+ });
127
+ const frame = sessionId === undefined ? { id, method, params } : { id, method, params, sessionId };
128
+ try {
129
+ this.socket.send(JSON.stringify(frame));
130
+ }
131
+ catch (err) {
132
+ this.pending.delete(id);
133
+ clearTimeout(timer);
134
+ const message = err instanceof Error ? err.message : "send failed";
135
+ reject(new BrowserToolError("CHROME_UNREACHABLE", `CDP send failed: ${message}`));
136
+ }
137
+ });
138
+ }
139
+ close() {
140
+ if (this.closed)
141
+ return;
142
+ this.handleSocketClosed("explicit");
143
+ try {
144
+ this.socket.close();
145
+ }
146
+ catch {
147
+ // The underlying socket may already be torn down; treat as idempotent.
148
+ }
149
+ }
150
+ isClosed() {
151
+ return this.closed;
152
+ }
153
+ closeCause() {
154
+ return this.closeReason;
155
+ }
156
+ handleMessage(data, isBinary) {
157
+ if (isBinary)
158
+ return;
159
+ const parsed = parseCdpText(rawDataToText(data));
160
+ if (parsed === undefined)
161
+ return;
162
+ if ("id" in parsed && typeof parsed.id === "number") {
163
+ this.resolvePending(parsed);
164
+ return;
165
+ }
166
+ if ("method" in parsed && typeof parsed.method === "string") {
167
+ this.dispatchEvent(parsed);
168
+ }
169
+ }
170
+ dispatchEvent(frame) {
171
+ const listenerEvent = {
172
+ method: frame.method,
173
+ params: frame.params ?? {},
174
+ ...(typeof frame.sessionId === "string" ? { sessionId: frame.sessionId } : {}),
175
+ };
176
+ for (const listener of [...this.listeners]) {
177
+ try {
178
+ listener(listenerEvent);
179
+ }
180
+ catch {
181
+ // A listener throwing must not stop event dispatch to other subscribers.
182
+ }
183
+ }
184
+ }
185
+ resolvePending(frame) {
186
+ const pending = this.pending.get(frame.id);
187
+ if (pending === undefined)
188
+ return;
189
+ this.pending.delete(frame.id);
190
+ clearTimeout(pending.timer);
191
+ if (frame.error !== undefined) {
192
+ pending.reject(new BrowserToolError("CDP_METHOD_FORBIDDEN",
193
+ // Static message — the raw Chrome error may contain paths or session IDs.
194
+ "Chrome rejected a CDP method."));
195
+ return;
196
+ }
197
+ pending.resolve(frame.result ?? {});
198
+ }
199
+ handleSocketClosed(reason) {
200
+ if (this.closed)
201
+ return;
202
+ this.closed = true;
203
+ this.closeReason = reason;
204
+ for (const [, pending] of this.pending) {
205
+ clearTimeout(pending.timer);
206
+ pending.reject(new BrowserToolError("TARGET_CLOSED", "CDP connection closed."));
207
+ }
208
+ this.pending.clear();
209
+ for (const listener of [...this.closeListeners]) {
210
+ try {
211
+ listener(reason);
212
+ }
213
+ catch {
214
+ // A close listener throwing must not stop cleanup notifications.
215
+ }
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,25 @@
1
+ export declare const BROWSER_ERROR_CODES: {
2
+ readonly CHROME_UNREACHABLE: "CHROME_UNREACHABLE";
3
+ readonly CHROME_VERSION_MISMATCH: "CHROME_VERSION_MISMATCH";
4
+ readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
5
+ readonly SESSION_LIMIT_EXCEEDED: "SESSION_LIMIT_EXCEEDED";
6
+ readonly ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED";
7
+ readonly SCHEME_NOT_ALLOWED: "SCHEME_NOT_ALLOWED";
8
+ readonly TARGET_CLOSED: "TARGET_CLOSED";
9
+ readonly CDP_TIMEOUT: "CDP_TIMEOUT";
10
+ readonly SCREENSHOT_TOO_LARGE: "SCREENSHOT_TOO_LARGE";
11
+ readonly CONTENT_TOO_LARGE: "CONTENT_TOO_LARGE";
12
+ readonly CDP_METHOD_FORBIDDEN: "CDP_METHOD_FORBIDDEN";
13
+ readonly CDP_TRANSPORT_REFUSED: "CDP_TRANSPORT_REFUSED";
14
+ readonly BAD_PORT: "BAD_PORT";
15
+ readonly BAD_URL: "BAD_URL";
16
+ readonly BAD_REQUEST: "BAD_REQUEST";
17
+ readonly NO_PENDING_SCREENSHOT: "NO_PENDING_SCREENSHOT";
18
+ readonly PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE";
19
+ };
20
+ export type BrowserErrorCode = (typeof BROWSER_ERROR_CODES)[keyof typeof BROWSER_ERROR_CODES];
21
+ export declare class BrowserToolError extends Error {
22
+ readonly code: BrowserErrorCode;
23
+ readonly status: number;
24
+ constructor(code: BrowserErrorCode, message: string);
25
+ }
@@ -0,0 +1,55 @@
1
+ // Typed failure modes for the browser tool (ADR-0017 D10). Callers switch on `code`, never on
2
+ // message — messages are static strings that never leak filesystem paths or raw Chrome diagnostics
3
+ // to the UI.
4
+ export const BROWSER_ERROR_CODES = {
5
+ CHROME_UNREACHABLE: "CHROME_UNREACHABLE",
6
+ CHROME_VERSION_MISMATCH: "CHROME_VERSION_MISMATCH",
7
+ SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
8
+ SESSION_LIMIT_EXCEEDED: "SESSION_LIMIT_EXCEEDED",
9
+ ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED",
10
+ SCHEME_NOT_ALLOWED: "SCHEME_NOT_ALLOWED",
11
+ TARGET_CLOSED: "TARGET_CLOSED",
12
+ CDP_TIMEOUT: "CDP_TIMEOUT",
13
+ SCREENSHOT_TOO_LARGE: "SCREENSHOT_TOO_LARGE",
14
+ CONTENT_TOO_LARGE: "CONTENT_TOO_LARGE",
15
+ CDP_METHOD_FORBIDDEN: "CDP_METHOD_FORBIDDEN",
16
+ CDP_TRANSPORT_REFUSED: "CDP_TRANSPORT_REFUSED",
17
+ BAD_PORT: "BAD_PORT",
18
+ BAD_URL: "BAD_URL",
19
+ BAD_REQUEST: "BAD_REQUEST",
20
+ NO_PENDING_SCREENSHOT: "NO_PENDING_SCREENSHOT",
21
+ PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE",
22
+ };
23
+ // HTTP status mapping per ADR-0017 D10. The two pure-input codes (BAD_PORT, BAD_URL, BAD_REQUEST)
24
+ // always map to 400; SESSION_LIMIT_EXCEEDED to 429; ORIGIN_NOT_ALLOWED to 403; SCHEME_NOT_ALLOWED
25
+ // to 400; TARGET_CLOSED to 410; CDP_TIMEOUT to 504; size-cap codes to 413; FORBIDDEN to 500
26
+ // (server bug); SESSION_NOT_FOUND to 404; CHROME_UNREACHABLE to 503; CHROME_VERSION_MISMATCH to 400.
27
+ const STATUS_MAP = {
28
+ CHROME_UNREACHABLE: 503,
29
+ CHROME_VERSION_MISMATCH: 400,
30
+ SESSION_NOT_FOUND: 404,
31
+ SESSION_LIMIT_EXCEEDED: 429,
32
+ ORIGIN_NOT_ALLOWED: 403,
33
+ SCHEME_NOT_ALLOWED: 400,
34
+ TARGET_CLOSED: 410,
35
+ CDP_TIMEOUT: 504,
36
+ SCREENSHOT_TOO_LARGE: 413,
37
+ CONTENT_TOO_LARGE: 413,
38
+ CDP_METHOD_FORBIDDEN: 500,
39
+ CDP_TRANSPORT_REFUSED: 503,
40
+ BAD_PORT: 400,
41
+ BAD_URL: 400,
42
+ BAD_REQUEST: 400,
43
+ NO_PENDING_SCREENSHOT: 409,
44
+ PAYLOAD_TOO_LARGE: 413,
45
+ };
46
+ export class BrowserToolError extends Error {
47
+ code;
48
+ status;
49
+ constructor(code, message) {
50
+ super(message);
51
+ this.name = "BrowserToolError";
52
+ this.code = code;
53
+ this.status = STATUS_MAP[code];
54
+ }
55
+ }
@@ -0,0 +1,5 @@
1
+ export { BROWSER_ERROR_CODES, BrowserToolError, type BrowserErrorCode } from "./errors.js";
2
+ export { isLoopbackHost, isLoopbackUrl, normalizeCdpPort, normalizeNavigateUrl, } from "./validators.js";
3
+ export type { BrowserContentResult, BrowserNavigateResult, BrowserScreenshotPersisted, BrowserScreenshotPreview, BrowserScreenshotResult, BrowserSessionMeta, BrowserSessionStatus, BrowserViewportPx, CdpReachability, NormalizedNavigateUrl, } from "./types.js";
4
+ export { CdpClient, PERMITTED_CDP_METHODS, type CdpCloseListener, type CdpClientOptions, type CdpEventListener, } from "./cdp-client.js";
5
+ export { createBrowserSessionManager, type BrowserEventEmitter, type BrowserEventEnvelope, type BrowserEventKind, type BrowserSessionManager, type BrowserSessionManagerOptions, } from "./session.js";
@@ -0,0 +1,6 @@
1
+ // Browser tool barrel — re-exports the public surface that BFF handlers and tests compose.
2
+ // ADR-0017. No runtime side effects.
3
+ export { BROWSER_ERROR_CODES, BrowserToolError } from "./errors.js";
4
+ export { isLoopbackHost, isLoopbackUrl, normalizeCdpPort, normalizeNavigateUrl, } from "./validators.js";
5
+ export { CdpClient, PERMITTED_CDP_METHODS, } from "./cdp-client.js";
6
+ export { createBrowserSessionManager, } from "./session.js";
@@ -0,0 +1,44 @@
1
+ import { CdpClient, type CdpClientOptions } from "./cdp-client.js";
2
+ import type { BrowserContentResult, BrowserNavigateResult, BrowserScreenshotResult, BrowserSessionMeta, CdpReachability } from "./types.js";
3
+ import { type SideFileWriterOptions } from "../../audit/side-file.js";
4
+ import type { EvidenceStore } from "../../audit/store.js";
5
+ export type BrowserEventKind = "session-opened" | "navigated" | "screenshot-captured" | "page-content-captured" | "session-closed" | "trust-warning" | "error";
6
+ export interface BrowserEventEnvelope {
7
+ readonly schemaVersion: "1";
8
+ readonly type: `browser:${BrowserEventKind}`;
9
+ readonly runId: string;
10
+ readonly fingerprint: string;
11
+ readonly seq: number;
12
+ readonly ts: number;
13
+ readonly kind: BrowserEventKind;
14
+ readonly sessionId: string;
15
+ readonly payload: Readonly<Record<string, unknown>>;
16
+ }
17
+ export type BrowserEventEmitter = (event: BrowserEventEnvelope) => void;
18
+ export interface BrowserSessionManagerOptions {
19
+ readonly evidenceDir: string;
20
+ readonly evidenceStore?: EvidenceStore | undefined;
21
+ readonly redactor?: (value: unknown) => unknown;
22
+ readonly cdpClientFactory?: (url: string, opts: CdpClientOptions) => CdpClient;
23
+ readonly fetchVersion?: (url: string) => Promise<unknown>;
24
+ readonly sideFileOptions?: SideFileWriterOptions;
25
+ readonly idleTtlMs?: number;
26
+ readonly nowMs?: () => number;
27
+ }
28
+ export interface BrowserSessionManager {
29
+ readonly checkStatus: (cdpPort: number) => Promise<CdpReachability>;
30
+ readonly openSession: (cdpPort: number) => Promise<BrowserSessionMeta>;
31
+ readonly closeSession: (sessionId: string) => Promise<void>;
32
+ readonly navigate: (sessionId: string, url: string) => Promise<BrowserNavigateResult>;
33
+ readonly screenshot: (sessionId: string) => Promise<BrowserScreenshotResult>;
34
+ readonly applyScreenshot: (sessionId: string, captureSeq: number) => Promise<BrowserScreenshotResult>;
35
+ readonly content: (sessionId: string) => Promise<BrowserContentResult>;
36
+ readonly listSessionIds: () => readonly string[];
37
+ readonly hasSession: (sessionId: string) => boolean;
38
+ readonly dispose: () => Promise<void>;
39
+ readonly subscribe: (sessionId: string, listener: BrowserEventEmitter) => () => void;
40
+ readonly counterAccessor: () => {
41
+ readonly navigations: number;
42
+ };
43
+ }
44
+ export declare function createBrowserSessionManager(options: BrowserSessionManagerOptions): BrowserSessionManager;