@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,7 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ import type { Project, UpdateProjectPatch } from "./types.js";
3
+ export declare function listProjects(db: DatabaseSync): readonly Project[];
4
+ export declare function getProject(db: DatabaseSync, path: string): Project | undefined;
5
+ export declare function upsertProject(db: DatabaseSync, normalizedPath: string, name: string, hasExplicitName: boolean, now: number): Project;
6
+ export declare function updateProject(db: DatabaseSync, path: string, patch: UpdateProjectPatch, now: number): Project;
7
+ export declare function deleteProject(db: DatabaseSync, path: string): void;
@@ -0,0 +1,61 @@
1
+ // ADR-0013 — projects CRUD. All SQL is module-scope constants; no string-interpolation into SQL.
2
+ import { notFound } from "./errors.js";
3
+ function rowToProject(row) {
4
+ return {
5
+ path: row.path,
6
+ name: row.name,
7
+ favorite: row.favorite !== 0,
8
+ createdAt: row.created_at,
9
+ lastOpenedAt: row.last_opened_at,
10
+ };
11
+ }
12
+ const SQL_LIST = "SELECT path, name, favorite, created_at, last_opened_at FROM projects ORDER BY path";
13
+ const SQL_GET = "SELECT path, name, favorite, created_at, last_opened_at FROM projects WHERE path = ?";
14
+ // UPSERT: if path already exists, bump last_opened_at; createdAt is preserved by ON CONFLICT DO UPDATE.
15
+ // A re-add with an explicit name repairs the display name; implicit basename derivation never
16
+ // overwrites a user-chosen existing name.
17
+ const SQL_UPSERT = `
18
+ INSERT INTO projects (path, name, favorite, created_at, last_opened_at)
19
+ VALUES (?, ?, 0, ?, ?)
20
+ ON CONFLICT(path) DO UPDATE SET
21
+ name = CASE WHEN ? THEN excluded.name ELSE name END,
22
+ last_opened_at = excluded.last_opened_at
23
+ RETURNING path, name, favorite, created_at, last_opened_at
24
+ `;
25
+ const SQL_UPDATE = `
26
+ UPDATE projects
27
+ SET name = COALESCE(?, name),
28
+ favorite = COALESCE(?, favorite),
29
+ last_opened_at = ?
30
+ WHERE path = ?
31
+ RETURNING path, name, favorite, created_at, last_opened_at
32
+ `;
33
+ const SQL_DELETE = "DELETE FROM projects WHERE path = ?";
34
+ export function listProjects(db) {
35
+ return db.prepare(SQL_LIST).all().map(rowToProject);
36
+ }
37
+ export function getProject(db, path) {
38
+ const row = db.prepare(SQL_GET).get(path);
39
+ return row === undefined ? undefined : rowToProject(row);
40
+ }
41
+ export function upsertProject(db, normalizedPath, name, hasExplicitName, now) {
42
+ const row = db
43
+ .prepare(SQL_UPSERT)
44
+ .get(normalizedPath, name, now, now, hasExplicitName ? 1 : 0);
45
+ return rowToProject(row);
46
+ }
47
+ export function updateProject(db, path, patch, now) {
48
+ const nameParam = patch.name ?? null;
49
+ const favoriteParam = patch.favorite === undefined ? null : patch.favorite ? 1 : 0;
50
+ const row = db
51
+ .prepare(SQL_UPDATE)
52
+ .get(nameParam, favoriteParam, now, path);
53
+ if (row === undefined)
54
+ throw notFound("Project");
55
+ return rowToProject(row);
56
+ }
57
+ export function deleteProject(db, path) {
58
+ const info = db.prepare(SQL_DELETE).run(path);
59
+ if (info.changes === 0)
60
+ throw notFound("Project");
61
+ }
@@ -0,0 +1,3 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ export declare const SCHEMA_VERSION = 2;
3
+ export declare function runMigrations(db: DatabaseSync): void;
@@ -0,0 +1,77 @@
1
+ // ADR-0013 D5 — Schema v1 + migration runner via PRAGMA user_version. Forward-only, idempotent,
2
+ // transactional. Each migration is a `.sql` string of one or more CREATE/ALTER statements; the
3
+ // runner applies migrations whose 1-based index > current user_version.
4
+ export const SCHEMA_VERSION = 2;
5
+ const V1_SQL = `
6
+ CREATE TABLE projects (
7
+ path TEXT NOT NULL PRIMARY KEY,
8
+ name TEXT NOT NULL,
9
+ favorite INTEGER NOT NULL DEFAULT 0,
10
+ created_at INTEGER NOT NULL,
11
+ last_opened_at INTEGER NOT NULL
12
+ ) STRICT;
13
+
14
+ CREATE TABLE chats (
15
+ id TEXT NOT NULL PRIMARY KEY,
16
+ project_path TEXT NOT NULL REFERENCES projects(path) ON DELETE CASCADE,
17
+ title TEXT NOT NULL,
18
+ selected_model TEXT NOT NULL,
19
+ branch_label TEXT,
20
+ status TEXT,
21
+ created_at INTEGER NOT NULL,
22
+ updated_at INTEGER NOT NULL
23
+ ) STRICT;
24
+
25
+ CREATE TABLE chat_messages (
26
+ id TEXT NOT NULL PRIMARY KEY,
27
+ chat_id TEXT NOT NULL REFERENCES chats(id) ON DELETE CASCADE,
28
+ role TEXT NOT NULL,
29
+ content TEXT NOT NULL,
30
+ timestamp INTEGER NOT NULL,
31
+ run_id TEXT,
32
+ workflow_id TEXT,
33
+ workflow_status TEXT,
34
+ short_result TEXT
35
+ ) STRICT;
36
+
37
+ CREATE INDEX idx_chats_project_path ON chats(project_path);
38
+ CREATE INDEX idx_messages_chat_id ON chat_messages(chat_id);
39
+ CREATE INDEX idx_messages_chat_ts ON chat_messages(chat_id, timestamp);
40
+ `;
41
+ // V2 (issue #66) adds an additive `task_type` column to chat_messages so the chat can label
42
+ // non-workflow task runs (verify, explain-plan) without overloading workflow_id. STRICT tables
43
+ // require an explicit type for ALTER ... ADD COLUMN; existing rows materialise NULL.
44
+ const V2_SQL = `
45
+ ALTER TABLE chat_messages ADD COLUMN task_type TEXT;
46
+ `;
47
+ const MIGRATIONS = [
48
+ { version: 1, sql: V1_SQL },
49
+ { version: 2, sql: V2_SQL },
50
+ ];
51
+ function currentUserVersion(db) {
52
+ const row = db.prepare("PRAGMA user_version").get();
53
+ return typeof row?.user_version === "number" ? row.user_version : 0;
54
+ }
55
+ function setUserVersion(db, v) {
56
+ // user_version cannot be parameterized; v is a server-controlled integer constant from MIGRATIONS.
57
+ db.exec(`PRAGMA user_version = ${String(v)}`);
58
+ }
59
+ // Applies pending migrations inside a single transaction. Throws (and rolls back) on any failure.
60
+ export function runMigrations(db) {
61
+ const start = currentUserVersion(db);
62
+ const pending = MIGRATIONS.filter((m) => m.version > start);
63
+ if (pending.length === 0)
64
+ return;
65
+ db.exec("BEGIN");
66
+ try {
67
+ for (const m of pending) {
68
+ db.exec(m.sql);
69
+ setUserVersion(db, m.version);
70
+ }
71
+ db.exec("COMMIT");
72
+ }
73
+ catch (error) {
74
+ db.exec("ROLLBACK");
75
+ throw error;
76
+ }
77
+ }
@@ -0,0 +1,80 @@
1
+ export interface Project {
2
+ readonly path: string;
3
+ readonly name: string;
4
+ readonly favorite: boolean;
5
+ readonly createdAt: number;
6
+ readonly lastOpenedAt: number;
7
+ }
8
+ export interface Chat {
9
+ readonly id: string;
10
+ readonly projectPath: string;
11
+ readonly title: string;
12
+ readonly selectedModel: string;
13
+ readonly branchLabel: string | undefined;
14
+ readonly status: "open" | "closed" | undefined;
15
+ readonly createdAt: number;
16
+ readonly updatedAt: number;
17
+ }
18
+ export type ChatRole = "user" | "assistant" | "system";
19
+ export type WorkflowStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
20
+ export interface ChatMessage {
21
+ readonly id: string;
22
+ readonly chatId: string;
23
+ readonly role: ChatRole;
24
+ readonly content: string;
25
+ readonly timestamp: number;
26
+ readonly runId: string | undefined;
27
+ readonly workflowId: string | undefined;
28
+ readonly workflowStatus: WorkflowStatus | undefined;
29
+ readonly shortResult: string | undefined;
30
+ readonly taskType: string | undefined;
31
+ }
32
+ export interface CreateChatOptions {
33
+ readonly branchLabel?: string;
34
+ }
35
+ export interface UpdateProjectPatch {
36
+ readonly name?: string;
37
+ readonly favorite?: boolean;
38
+ }
39
+ export interface UpdateChatPatch {
40
+ readonly title?: string;
41
+ readonly selectedModel?: string;
42
+ readonly branchLabel?: string;
43
+ readonly status?: "open" | "closed";
44
+ }
45
+ export interface NewChatMessage {
46
+ readonly chatId: string;
47
+ readonly role: ChatRole;
48
+ readonly content: string;
49
+ readonly timestamp: number;
50
+ readonly runId: string | undefined;
51
+ readonly workflowId: string | undefined;
52
+ readonly workflowStatus: WorkflowStatus | undefined;
53
+ readonly shortResult: string | undefined;
54
+ readonly taskType: string | undefined;
55
+ }
56
+ export interface UpdateChatMessagePatch {
57
+ readonly workflowStatus?: WorkflowStatus;
58
+ readonly shortResult?: string;
59
+ readonly taskType?: string;
60
+ }
61
+ export interface UiStore {
62
+ readonly listProjects: () => readonly Project[];
63
+ readonly createProject: (path: string, name?: string) => Project;
64
+ readonly updateProject: (path: string, patch: UpdateProjectPatch) => Project;
65
+ readonly deleteProject: (path: string) => void;
66
+ readonly listChats: (projectPath: string) => readonly Chat[];
67
+ readonly createChat: (projectPath: string, title: string, selectedModel: string, opts?: CreateChatOptions) => Chat;
68
+ readonly updateChat: (id: string, patch: UpdateChatPatch) => Chat;
69
+ readonly deleteChat: (id: string) => void;
70
+ readonly listMessages: (chatId: string) => readonly ChatMessage[];
71
+ readonly createMessage: (msg: NewChatMessage) => ChatMessage;
72
+ readonly createMessages: (messages: readonly NewChatMessage[]) => readonly ChatMessage[];
73
+ readonly updateMessage: (id: string, patch: UpdateChatMessagePatch) => ChatMessage;
74
+ readonly close: () => void;
75
+ }
76
+ export interface UiStoreFactoryOptions {
77
+ readonly now?: () => number;
78
+ readonly newId?: () => string;
79
+ readonly redactString?: (input: string) => string;
80
+ }
@@ -0,0 +1,3 @@
1
+ // ADR-0013 D4 — UiStore port and entity types. The port is the seam for testing; the concrete
2
+ // `createNodeUiStore` adapter and the `createInMemoryUiStore` test adapter both implement it.
3
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface ValidateProjectPathOptions {
2
+ readonly mustExist: boolean;
3
+ }
4
+ export declare function validateProjectPath(input: string, options: ValidateProjectPathOptions): string;
@@ -0,0 +1,72 @@
1
+ // ADR-0013 D6 — Path validation policy (fail-closed). Seven rules in one place. NO path reaches the
2
+ // database without passing every check. Normalized absolute form is the only thing that returns.
3
+ import { isAbsolute, normalize, resolve as resolvePath } from "node:path";
4
+ import { statSync } from "node:fs";
5
+ import { invalidPath, pathNotDirectory, pathNotFound } from "./errors.js";
6
+ const MAX_PATH_LEN = 4096;
7
+ // scheme prefix per RFC 3986: ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) "://"
8
+ const REMOTE_URL_PREFIX_RE = /^[a-zA-Z][a-zA-Z0-9+\-.]*:\/\//;
9
+ const WINDOWS_DRIVE_RE = /^[a-zA-Z]:[\\/]/;
10
+ const WINDOWS_TRAVERSAL_SEGMENT_RE = /(^|[\\/])\.\.(?:[\\/]|$)/;
11
+ function isWindowsRootPath(input) {
12
+ return input.startsWith("\\\\") || input.startsWith("//");
13
+ }
14
+ function rejectWindowsPathShape(input) {
15
+ if (WINDOWS_DRIVE_RE.test(input) || isWindowsRootPath(input)) {
16
+ throw invalidPath("Windows drive, UNC, and device paths are not supported.");
17
+ }
18
+ }
19
+ function rejectTraversal(input) {
20
+ if (WINDOWS_TRAVERSAL_SEGMENT_RE.test(input)) {
21
+ throw invalidPath("Path contains a traversal segment.");
22
+ }
23
+ // Pre-normalize traversal segment check (D6 rule 5): reject explicit `..` segments.
24
+ if (input.includes("/../") || input.endsWith("/..") || input === "..") {
25
+ throw invalidPath("Path contains a traversal segment.");
26
+ }
27
+ }
28
+ function rejectStructural(input) {
29
+ if (input.length === 0)
30
+ throw invalidPath("Path is empty.");
31
+ if (input.length > MAX_PATH_LEN)
32
+ throw invalidPath("Path too long.");
33
+ if (input.includes("\0"))
34
+ throw invalidPath("Path contains a null byte.");
35
+ if (REMOTE_URL_PREFIX_RE.test(input))
36
+ throw invalidPath("Remote URL forms are not allowed.");
37
+ rejectWindowsPathShape(input);
38
+ rejectTraversal(input);
39
+ if (!isAbsolute(input))
40
+ throw invalidPath("Path must be absolute.");
41
+ }
42
+ function normalizeOrReject(input) {
43
+ const normalized = normalize(input);
44
+ const resolved = resolvePath(normalized);
45
+ if (!isAbsolute(resolved))
46
+ throw invalidPath("Path must be absolute after normalization.");
47
+ rejectWindowsPathShape(resolved);
48
+ rejectTraversal(resolved);
49
+ return resolved;
50
+ }
51
+ function statAsDirectory(resolved) {
52
+ let s;
53
+ try {
54
+ s = statSync(resolved);
55
+ }
56
+ catch {
57
+ throw pathNotFound();
58
+ }
59
+ if (!s.isDirectory())
60
+ throw pathNotDirectory();
61
+ }
62
+ // Validates and normalizes a project path. Returns the canonical absolute path on success; throws a
63
+ // typed UiStoreError otherwise. When `mustExist` is false, the stat-as-directory step is skipped
64
+ // (PATCH/DELETE callers identify a project by its previously normalized path; the directory may
65
+ // have been deleted/moved since registration — that is reflected via derived availability).
66
+ export function validateProjectPath(input, options) {
67
+ rejectStructural(input);
68
+ const resolved = normalizeOrReject(input);
69
+ if (options.mustExist)
70
+ statAsDirectory(resolved);
71
+ return resolved;
72
+ }
@@ -0,0 +1,16 @@
1
+ import type { RouteContext, RouteResult } from "./routes.js";
2
+ import type { UiHandlerDeps } from "./deps.js";
3
+ declare function notFoundResult(message: string): RouteResult;
4
+ export declare function handleListProjects(_ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
5
+ export declare function handleCreateProject(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
6
+ export declare function handleUpdateProject(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
7
+ export declare function handleDeleteProject(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
8
+ export declare function handleListChats(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
9
+ export declare function handleCreateChat(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
10
+ export declare function handleUpdateChat(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
11
+ export declare function handleDeleteChat(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
12
+ export declare function handleListMessages(ctx: RouteContext, deps: UiHandlerDeps): RouteResult;
13
+ export declare function handleCreateMessage(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
14
+ export declare function handleCreateRunSummaryPair(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
15
+ export declare function handleUpdateMessage(ctx: RouteContext, deps: UiHandlerDeps): Promise<RouteResult>;
16
+ export { notFoundResult };