@diff-review-system/drs 4.0.0-rc.4 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/.pi/agents/describe/pr-describer.md +14 -0
  2. package/.pi/agents/review/unified-reviewer.md +31 -1
  3. package/.pi/agents/task/agents-md-updater.md +3 -1
  4. package/.pi/agents/task/review-issue-fixer.md +18 -1
  5. package/.pi/agents/visual/pr-explainer.md +205 -0
  6. package/.pi/workflows/github-pr-describe.yaml +10 -7
  7. package/.pi/workflows/github-pr-fix-review-issues-stacked.yaml +148 -0
  8. package/.pi/workflows/github-pr-post-comment.yaml +10 -10
  9. package/.pi/workflows/github-pr-review-post.yaml +19 -8
  10. package/.pi/workflows/github-pr-review.yaml +348 -7
  11. package/.pi/workflows/github-pr-show-changes.yaml +8 -8
  12. package/.pi/workflows/github-pr-update-agents-md-stacked.yaml +103 -0
  13. package/.pi/workflows/github-pr-visual-explain.yaml +35 -0
  14. package/.pi/workflows/gitlab-mr-describe.yaml +8 -5
  15. package/.pi/workflows/gitlab-mr-fix-review-issues-stacked.yaml +144 -0
  16. package/.pi/workflows/gitlab-mr-post-comment.yaml +8 -8
  17. package/.pi/workflows/gitlab-mr-review.yaml +348 -5
  18. package/.pi/workflows/gitlab-mr-show-changes.yaml +6 -6
  19. package/.pi/workflows/gitlab-mr-update-agents-md-stacked.yaml +100 -0
  20. package/.pi/workflows/gitlab-mr-visual-explain.yaml +33 -0
  21. package/.pi/workflows/local-fix-review-issues.yaml +82 -13
  22. package/.pi/workflows/local-review.yaml +9 -2
  23. package/.pi/workflows/local-update-agents-md.yaml +1 -1
  24. package/.pi/workflows/local-visual-explain.yaml +31 -0
  25. package/.pi/workflows/release-changelog-finalize.yaml +47 -0
  26. package/.pi/workflows/tag-changelog-update.yaml +4 -4
  27. package/README.md +91 -27
  28. package/dist/ci/runner.d.ts.map +1 -1
  29. package/dist/ci/runner.js +3 -1
  30. package/dist/ci/runner.js.map +1 -1
  31. package/dist/cli/index.js +48 -6
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/run-agent.d.ts +2 -0
  34. package/dist/cli/run-agent.d.ts.map +1 -1
  35. package/dist/cli/run-agent.js +4 -0
  36. package/dist/cli/run-agent.js.map +1 -1
  37. package/dist/cli/workflow.d.ts +56 -2
  38. package/dist/cli/workflow.d.ts.map +1 -1
  39. package/dist/cli/workflow.js +2165 -85
  40. package/dist/cli/workflow.js.map +1 -1
  41. package/dist/github/client.d.ts +12 -0
  42. package/dist/github/client.d.ts.map +1 -1
  43. package/dist/github/client.js +27 -0
  44. package/dist/github/client.js.map +1 -1
  45. package/dist/github/platform-adapter.d.ts +6 -1
  46. package/dist/github/platform-adapter.d.ts.map +1 -1
  47. package/dist/github/platform-adapter.js +84 -8
  48. package/dist/github/platform-adapter.js.map +1 -1
  49. package/dist/gitlab/client.d.ts +11 -0
  50. package/dist/gitlab/client.d.ts.map +1 -1
  51. package/dist/gitlab/client.js +11 -0
  52. package/dist/gitlab/client.js.map +1 -1
  53. package/dist/gitlab/platform-adapter.d.ts +3 -1
  54. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  55. package/dist/gitlab/platform-adapter.js +32 -1
  56. package/dist/gitlab/platform-adapter.js.map +1 -1
  57. package/dist/lib/comment-formatter.d.ts +8 -0
  58. package/dist/lib/comment-formatter.d.ts.map +1 -1
  59. package/dist/lib/comment-formatter.js +12 -4
  60. package/dist/lib/comment-formatter.js.map +1 -1
  61. package/dist/lib/comment-poster.d.ts.map +1 -1
  62. package/dist/lib/comment-poster.js +28 -1
  63. package/dist/lib/comment-poster.js.map +1 -1
  64. package/dist/lib/config.d.ts +50 -11
  65. package/dist/lib/config.d.ts.map +1 -1
  66. package/dist/lib/config.js +163 -28
  67. package/dist/lib/config.js.map +1 -1
  68. package/dist/lib/context-compression.d.ts +10 -0
  69. package/dist/lib/context-compression.d.ts.map +1 -1
  70. package/dist/lib/context-compression.js +101 -13
  71. package/dist/lib/context-compression.js.map +1 -1
  72. package/dist/lib/context-loader.d.ts +2 -1
  73. package/dist/lib/context-loader.d.ts.map +1 -1
  74. package/dist/lib/context-loader.js +70 -1
  75. package/dist/lib/context-loader.js.map +1 -1
  76. package/dist/lib/describe-core.d.ts.map +1 -1
  77. package/dist/lib/describe-core.js +3 -2
  78. package/dist/lib/describe-core.js.map +1 -1
  79. package/dist/lib/diff-lines.d.ts +9 -0
  80. package/dist/lib/diff-lines.d.ts.map +1 -1
  81. package/dist/lib/diff-lines.js +17 -9
  82. package/dist/lib/diff-lines.js.map +1 -1
  83. package/dist/lib/exit.js +4 -4
  84. package/dist/lib/exit.js.map +1 -1
  85. package/dist/lib/html-artifact.d.ts +14 -0
  86. package/dist/lib/html-artifact.d.ts.map +1 -0
  87. package/dist/lib/html-artifact.js +59 -0
  88. package/dist/lib/html-artifact.js.map +1 -0
  89. package/dist/lib/issue-parser.js +3 -3
  90. package/dist/lib/issue-parser.js.map +1 -1
  91. package/dist/lib/json-output-schema.d.ts +70 -0
  92. package/dist/lib/json-output-schema.d.ts.map +1 -1
  93. package/dist/lib/json-output-schema.js +40 -0
  94. package/dist/lib/json-output-schema.js.map +1 -1
  95. package/dist/lib/platform-client.d.ts +26 -0
  96. package/dist/lib/platform-client.d.ts.map +1 -1
  97. package/dist/lib/review-artifact.d.ts +69 -0
  98. package/dist/lib/review-artifact.d.ts.map +1 -0
  99. package/dist/lib/review-artifact.js +171 -0
  100. package/dist/lib/review-artifact.js.map +1 -0
  101. package/dist/lib/review-core.d.ts +6 -4
  102. package/dist/lib/review-core.d.ts.map +1 -1
  103. package/dist/lib/review-core.js +71 -151
  104. package/dist/lib/review-core.js.map +1 -1
  105. package/dist/lib/review-orchestrator.d.ts +23 -0
  106. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  107. package/dist/lib/review-orchestrator.js +20 -13
  108. package/dist/lib/review-orchestrator.js.map +1 -1
  109. package/dist/lib/review-usage.d.ts +4 -0
  110. package/dist/lib/review-usage.d.ts.map +1 -1
  111. package/dist/lib/review-usage.js +25 -0
  112. package/dist/lib/review-usage.js.map +1 -1
  113. package/dist/lib/trace-collector.d.ts +105 -0
  114. package/dist/lib/trace-collector.d.ts.map +1 -0
  115. package/dist/lib/trace-collector.js +255 -0
  116. package/dist/lib/trace-collector.js.map +1 -0
  117. package/dist/lib/trace-html.d.ts +3 -0
  118. package/dist/lib/trace-html.d.ts.map +1 -0
  119. package/dist/lib/trace-html.js +349 -0
  120. package/dist/lib/trace-html.js.map +1 -0
  121. package/dist/lib/workflow-artifacts.d.ts +54 -0
  122. package/dist/lib/workflow-artifacts.d.ts.map +1 -0
  123. package/dist/lib/workflow-artifacts.js +150 -0
  124. package/dist/lib/workflow-artifacts.js.map +1 -0
  125. package/dist/pi/sdk.d.ts.map +1 -1
  126. package/dist/pi/sdk.js +570 -6
  127. package/dist/pi/sdk.js.map +1 -1
  128. package/dist/runtime/agent-loader.js +2 -2
  129. package/dist/runtime/client.d.ts +2 -0
  130. package/dist/runtime/client.d.ts.map +1 -1
  131. package/dist/runtime/client.js +11 -5
  132. package/dist/runtime/client.js.map +1 -1
  133. package/package.json +21 -15
  134. package/.pi/workflows/github-pr-describe-post.yaml +0 -24
  135. package/.pi/workflows/gitlab-mr-describe-post.yaml +0 -22
  136. package/.pi/workflows/gitlab-mr-review-code-quality.yaml +0 -31
  137. package/.pi/workflows/gitlab-mr-review-post-code-quality.yaml +0 -40
  138. package/.pi/workflows/gitlab-mr-review-post.yaml +0 -30
  139. package/.pi/workflows/local-staged-review.yaml +0 -17
  140. package/dist/cli/run-agent.test.d.ts +0 -2
  141. package/dist/cli/run-agent.test.d.ts.map +0 -1
  142. package/dist/cli/run-agent.test.js +0 -204
  143. package/dist/cli/run-agent.test.js.map +0 -1
  144. package/dist/cli/workflow.test.d.ts +0 -2
  145. package/dist/cli/workflow.test.d.ts.map +0 -1
  146. package/dist/cli/workflow.test.js +0 -1410
  147. package/dist/cli/workflow.test.js.map +0 -1
  148. package/dist/github/client.test.d.ts +0 -2
  149. package/dist/github/client.test.d.ts.map +0 -1
  150. package/dist/github/client.test.js +0 -206
  151. package/dist/github/client.test.js.map +0 -1
  152. package/dist/github/platform-adapter.test.d.ts +0 -2
  153. package/dist/github/platform-adapter.test.d.ts.map +0 -1
  154. package/dist/github/platform-adapter.test.js +0 -40
  155. package/dist/github/platform-adapter.test.js.map +0 -1
  156. package/dist/gitlab/diff-parser.test.d.ts +0 -2
  157. package/dist/gitlab/diff-parser.test.d.ts.map +0 -1
  158. package/dist/gitlab/diff-parser.test.js +0 -315
  159. package/dist/gitlab/diff-parser.test.js.map +0 -1
  160. package/dist/gitlab/platform-adapter.test.d.ts +0 -2
  161. package/dist/gitlab/platform-adapter.test.d.ts.map +0 -1
  162. package/dist/gitlab/platform-adapter.test.js +0 -21
  163. package/dist/gitlab/platform-adapter.test.js.map +0 -1
  164. package/dist/index.test.d.ts +0 -2
  165. package/dist/index.test.d.ts.map +0 -1
  166. package/dist/index.test.js +0 -7
  167. package/dist/index.test.js.map +0 -1
  168. package/dist/lib/code-quality-report.test.d.ts +0 -2
  169. package/dist/lib/code-quality-report.test.d.ts.map +0 -1
  170. package/dist/lib/code-quality-report.test.js +0 -327
  171. package/dist/lib/code-quality-report.test.js.map +0 -1
  172. package/dist/lib/comment-formatter.test.d.ts +0 -2
  173. package/dist/lib/comment-formatter.test.d.ts.map +0 -1
  174. package/dist/lib/comment-formatter.test.js +0 -727
  175. package/dist/lib/comment-formatter.test.js.map +0 -1
  176. package/dist/lib/comment-manager.test.d.ts +0 -2
  177. package/dist/lib/comment-manager.test.d.ts.map +0 -1
  178. package/dist/lib/comment-manager.test.js +0 -680
  179. package/dist/lib/comment-manager.test.js.map +0 -1
  180. package/dist/lib/comment-poster.test.d.ts +0 -5
  181. package/dist/lib/comment-poster.test.d.ts.map +0 -1
  182. package/dist/lib/comment-poster.test.js +0 -255
  183. package/dist/lib/comment-poster.test.js.map +0 -1
  184. package/dist/lib/config-model-overrides.test.d.ts +0 -2
  185. package/dist/lib/config-model-overrides.test.d.ts.map +0 -1
  186. package/dist/lib/config-model-overrides.test.js +0 -218
  187. package/dist/lib/config-model-overrides.test.js.map +0 -1
  188. package/dist/lib/config.test.d.ts +0 -2
  189. package/dist/lib/config.test.d.ts.map +0 -1
  190. package/dist/lib/config.test.js +0 -353
  191. package/dist/lib/config.test.js.map +0 -1
  192. package/dist/lib/context-compression.test.d.ts +0 -2
  193. package/dist/lib/context-compression.test.d.ts.map +0 -1
  194. package/dist/lib/context-compression.test.js +0 -337
  195. package/dist/lib/context-compression.test.js.map +0 -1
  196. package/dist/lib/context-loader.test.d.ts +0 -2
  197. package/dist/lib/context-loader.test.d.ts.map +0 -1
  198. package/dist/lib/context-loader.test.js +0 -212
  199. package/dist/lib/context-loader.test.js.map +0 -1
  200. package/dist/lib/cursor-fix-link.test.d.ts +0 -2
  201. package/dist/lib/cursor-fix-link.test.d.ts.map +0 -1
  202. package/dist/lib/cursor-fix-link.test.js +0 -70
  203. package/dist/lib/cursor-fix-link.test.js.map +0 -1
  204. package/dist/lib/describe-core.test.d.ts +0 -2
  205. package/dist/lib/describe-core.test.d.ts.map +0 -1
  206. package/dist/lib/describe-core.test.js +0 -208
  207. package/dist/lib/describe-core.test.js.map +0 -1
  208. package/dist/lib/describe-output-path.test.d.ts +0 -2
  209. package/dist/lib/describe-output-path.test.d.ts.map +0 -1
  210. package/dist/lib/describe-output-path.test.js +0 -51
  211. package/dist/lib/describe-output-path.test.js.map +0 -1
  212. package/dist/lib/describe-parser.test.d.ts +0 -2
  213. package/dist/lib/describe-parser.test.d.ts.map +0 -1
  214. package/dist/lib/describe-parser.test.js +0 -282
  215. package/dist/lib/describe-parser.test.js.map +0 -1
  216. package/dist/lib/description-executor.test.d.ts +0 -2
  217. package/dist/lib/description-executor.test.d.ts.map +0 -1
  218. package/dist/lib/description-executor.test.js +0 -135
  219. package/dist/lib/description-executor.test.js.map +0 -1
  220. package/dist/lib/description-formatter.test.d.ts +0 -2
  221. package/dist/lib/description-formatter.test.d.ts.map +0 -1
  222. package/dist/lib/description-formatter.test.js +0 -57
  223. package/dist/lib/description-formatter.test.js.map +0 -1
  224. package/dist/lib/diff-lines.test.d.ts +0 -2
  225. package/dist/lib/diff-lines.test.d.ts.map +0 -1
  226. package/dist/lib/diff-lines.test.js +0 -13
  227. package/dist/lib/diff-lines.test.js.map +0 -1
  228. package/dist/lib/diff-parser.test.d.ts +0 -2
  229. package/dist/lib/diff-parser.test.d.ts.map +0 -1
  230. package/dist/lib/diff-parser.test.js +0 -335
  231. package/dist/lib/diff-parser.test.js.map +0 -1
  232. package/dist/lib/error-comment-poster.test.d.ts +0 -2
  233. package/dist/lib/error-comment-poster.test.d.ts.map +0 -1
  234. package/dist/lib/error-comment-poster.test.js +0 -128
  235. package/dist/lib/error-comment-poster.test.js.map +0 -1
  236. package/dist/lib/exit.test.d.ts +0 -2
  237. package/dist/lib/exit.test.d.ts.map +0 -1
  238. package/dist/lib/exit.test.js +0 -120
  239. package/dist/lib/exit.test.js.map +0 -1
  240. package/dist/lib/issue-parser.test.d.ts +0 -2
  241. package/dist/lib/issue-parser.test.d.ts.map +0 -1
  242. package/dist/lib/issue-parser.test.js +0 -281
  243. package/dist/lib/issue-parser.test.js.map +0 -1
  244. package/dist/lib/json-output-schema.test.d.ts +0 -2
  245. package/dist/lib/json-output-schema.test.d.ts.map +0 -1
  246. package/dist/lib/json-output-schema.test.js +0 -92
  247. package/dist/lib/json-output-schema.test.js.map +0 -1
  248. package/dist/lib/json-output.test.d.ts +0 -2
  249. package/dist/lib/json-output.test.d.ts.map +0 -1
  250. package/dist/lib/json-output.test.js +0 -141
  251. package/dist/lib/json-output.test.js.map +0 -1
  252. package/dist/lib/logger.test.d.ts +0 -2
  253. package/dist/lib/logger.test.d.ts.map +0 -1
  254. package/dist/lib/logger.test.js +0 -324
  255. package/dist/lib/logger.test.js.map +0 -1
  256. package/dist/lib/position-validator.test.d.ts +0 -2
  257. package/dist/lib/position-validator.test.d.ts.map +0 -1
  258. package/dist/lib/position-validator.test.js +0 -128
  259. package/dist/lib/position-validator.test.js.map +0 -1
  260. package/dist/lib/prompt-budget.test.d.ts +0 -2
  261. package/dist/lib/prompt-budget.test.d.ts.map +0 -1
  262. package/dist/lib/prompt-budget.test.js +0 -55
  263. package/dist/lib/prompt-budget.test.js.map +0 -1
  264. package/dist/lib/repository-validator.test.d.ts +0 -5
  265. package/dist/lib/repository-validator.test.d.ts.map +0 -1
  266. package/dist/lib/repository-validator.test.js +0 -341
  267. package/dist/lib/repository-validator.test.js.map +0 -1
  268. package/dist/lib/review-core.test.d.ts +0 -2
  269. package/dist/lib/review-core.test.d.ts.map +0 -1
  270. package/dist/lib/review-core.test.js +0 -614
  271. package/dist/lib/review-core.test.js.map +0 -1
  272. package/dist/lib/review-orchestrator.test.d.ts +0 -2
  273. package/dist/lib/review-orchestrator.test.d.ts.map +0 -1
  274. package/dist/lib/review-orchestrator.test.js +0 -552
  275. package/dist/lib/review-orchestrator.test.js.map +0 -1
  276. package/dist/lib/review-output-path.test.d.ts +0 -2
  277. package/dist/lib/review-output-path.test.d.ts.map +0 -1
  278. package/dist/lib/review-output-path.test.js +0 -83
  279. package/dist/lib/review-output-path.test.js.map +0 -1
  280. package/dist/lib/review-parser.test.d.ts +0 -2
  281. package/dist/lib/review-parser.test.d.ts.map +0 -1
  282. package/dist/lib/review-parser.test.js +0 -130
  283. package/dist/lib/review-parser.test.js.map +0 -1
  284. package/dist/lib/review-usage.test.d.ts +0 -2
  285. package/dist/lib/review-usage.test.d.ts.map +0 -1
  286. package/dist/lib/review-usage.test.js +0 -83
  287. package/dist/lib/review-usage.test.js.map +0 -1
  288. package/dist/lib/unified-review-executor.d.ts +0 -58
  289. package/dist/lib/unified-review-executor.d.ts.map +0 -1
  290. package/dist/lib/unified-review-executor.js +0 -201
  291. package/dist/lib/unified-review-executor.js.map +0 -1
  292. package/dist/lib/unified-review-executor.test.d.ts +0 -5
  293. package/dist/lib/unified-review-executor.test.d.ts.map +0 -1
  294. package/dist/lib/unified-review-executor.test.js +0 -472
  295. package/dist/lib/unified-review-executor.test.js.map +0 -1
  296. package/dist/lib/write-json-output.test.d.ts +0 -2
  297. package/dist/lib/write-json-output.test.d.ts.map +0 -1
  298. package/dist/lib/write-json-output.test.js +0 -259
  299. package/dist/lib/write-json-output.test.js.map +0 -1
  300. package/dist/pi/sdk.test.d.ts +0 -2
  301. package/dist/pi/sdk.test.d.ts.map +0 -1
  302. package/dist/pi/sdk.test.js +0 -488
  303. package/dist/pi/sdk.test.js.map +0 -1
  304. package/dist/runtime/agent-loader.test.d.ts +0 -2
  305. package/dist/runtime/agent-loader.test.d.ts.map +0 -1
  306. package/dist/runtime/agent-loader.test.js +0 -277
  307. package/dist/runtime/agent-loader.test.js.map +0 -1
  308. package/dist/runtime/client.test.d.ts +0 -2
  309. package/dist/runtime/client.test.d.ts.map +0 -1
  310. package/dist/runtime/client.test.js +0 -772
  311. package/dist/runtime/client.test.js.map +0 -1
  312. package/dist/runtime/path-config.test.d.ts +0 -2
  313. package/dist/runtime/path-config.test.d.ts.map +0 -1
  314. package/dist/runtime/path-config.test.js +0 -112
  315. package/dist/runtime/path-config.test.js.map +0 -1
@@ -36,9 +36,34 @@ export function createAgentUsageSummary(agentType) {
36
36
  return {
37
37
  agentType,
38
38
  turns: 0,
39
+ toolCalls: {},
40
+ skills: [],
39
41
  usage: createEmptyUsageSummary(),
40
42
  };
41
43
  }
44
+ export function applySkillCall(agentUsage, skillName) {
45
+ if (!skillName) {
46
+ return agentUsage;
47
+ }
48
+ const skills = new Set(agentUsage.skills ?? []);
49
+ skills.add(skillName);
50
+ return {
51
+ ...agentUsage,
52
+ skills: [...skills].sort(),
53
+ };
54
+ }
55
+ export function applyToolCall(agentUsage, toolName) {
56
+ if (!toolName) {
57
+ return agentUsage;
58
+ }
59
+ return {
60
+ ...agentUsage,
61
+ toolCalls: {
62
+ ...(agentUsage.toolCalls ?? {}),
63
+ [toolName]: (agentUsage.toolCalls?.[toolName] ?? 0) + 1,
64
+ },
65
+ };
66
+ }
42
67
  export function applyUsageMessage(agentUsage, message) {
43
68
  const model = agentUsage.model ?? formatModelIdentifier(message.provider, message.model);
44
69
  const turns = agentUsage.turns + 1;
@@ -1 +1 @@
1
- {"version":3,"file":"review-usage.js","sourceRoot":"","sources":["../../src/lib/review-usage.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,KAAK,EAAE,uBAAuB,EAAE;QAChC,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,KAA4B;IAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;QAChB,CAAC,KAAK,CAAC,WAAW;YAChB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK;QACL,MAAM;QACN,SAAS;QACT,UAAU;QACV,WAAW;QACX,IAAI;KACL,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO;QACL,SAAS;QACT,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,uBAAuB,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,UAA6B,EAC7B,OAAyB;IAEzB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO;YACL,GAAG,UAAU;YACb,KAAK;YACL,KAAK;SACN,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,UAAU;QACb,KAAK;QACL,KAAK;QACL,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EACjD,uBAAuB,EAAE,CAC1B,CAAC;IAEF,OAAO;QACL,KAAK;QACL,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAiB,EAAE,KAAc;IACrE,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"review-usage.js","sourceRoot":"","sources":["../../src/lib/review-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ export interface TraceUsage {
2
+ input: number;
3
+ output: number;
4
+ cacheRead: number;
5
+ cacheWrite: number;
6
+ cacheWrite1h?: number;
7
+ totalTokens: number;
8
+ cost: {
9
+ input: number;
10
+ output: number;
11
+ cacheRead: number;
12
+ cacheWrite: number;
13
+ total: number;
14
+ };
15
+ }
16
+ export interface TraceToolCall {
17
+ toolCallId: string;
18
+ toolName: string;
19
+ args: unknown;
20
+ result: unknown;
21
+ isError: boolean;
22
+ startedAt: string;
23
+ completedAt: string;
24
+ durationMs: number;
25
+ }
26
+ export interface TraceTurn {
27
+ turnIndex: number;
28
+ startedAt: string;
29
+ completedAt?: string;
30
+ durationMs?: number;
31
+ model?: string;
32
+ provider?: string;
33
+ responseModel?: string;
34
+ responseId?: string;
35
+ stopReason?: string;
36
+ usage?: TraceUsage;
37
+ assistantContent?: string;
38
+ thinkingContent?: string;
39
+ toolCalls: TraceToolCall[];
40
+ }
41
+ export interface AgentTrace {
42
+ id: string;
43
+ nodeId: string;
44
+ agentId: string;
45
+ sessionId: string;
46
+ prompt: string;
47
+ systemPrompt?: string;
48
+ model?: string;
49
+ provider?: string;
50
+ startedAt: string;
51
+ completedAt?: string;
52
+ durationMs?: number;
53
+ turns: TraceTurn[];
54
+ skillsLoaded: string[];
55
+ totalUsage?: TraceUsage;
56
+ toolCallCount: number;
57
+ errorMessage?: string;
58
+ workflowIteration?: number;
59
+ }
60
+ export interface WorkflowTrace {
61
+ id: string;
62
+ workflowName: string;
63
+ startedAt: string;
64
+ completedAt?: string;
65
+ durationMs?: number;
66
+ inputs: Record<string, string>;
67
+ agentTraces: AgentTrace[];
68
+ }
69
+ type PiEvent = {
70
+ type: string;
71
+ [key: string]: unknown;
72
+ };
73
+ export declare class TraceCollector {
74
+ private traces;
75
+ private activeSessions;
76
+ private promptText;
77
+ private nodeId;
78
+ private agentId;
79
+ private workflowIteration;
80
+ setContext(nodeId: string, agentId: string, prompt: string, iteration?: number): void;
81
+ attachSession(session: {
82
+ subscribe: (listener: (event: PiEvent) => void) => () => void;
83
+ messages?: unknown[];
84
+ systemPrompt?: string;
85
+ model?: {
86
+ provider?: string;
87
+ modelId?: string;
88
+ };
89
+ }, sessionId: string): void;
90
+ private handleEvent;
91
+ private startTurn;
92
+ private endTurn;
93
+ private startToolCall;
94
+ private endToolCall;
95
+ private extractSkillName;
96
+ private captureMessage;
97
+ private completeTrace;
98
+ finalizeSession(sessionId: string): AgentTrace | undefined;
99
+ finalizeCurrentTrace(): AgentTrace | undefined;
100
+ getTraces(): AgentTrace[];
101
+ buildWorkflowTrace(workflowName: string, inputs: Record<string, string>, startedAt: string): WorkflowTrace;
102
+ clear(): void;
103
+ }
104
+ export {};
105
+ //# sourceMappingURL=trace-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-collector.d.ts","sourceRoot":"","sources":["../../src/lib/trace-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ import { randomUUID } from 'crypto';
2
+ export class TraceCollector {
3
+ traces = [];
4
+ activeSessions = new Map();
5
+ promptText = '';
6
+ nodeId = '';
7
+ agentId = '';
8
+ workflowIteration;
9
+ setContext(nodeId, agentId, prompt, iteration) {
10
+ this.nodeId = nodeId;
11
+ this.agentId = agentId;
12
+ this.promptText = prompt;
13
+ this.workflowIteration = iteration;
14
+ }
15
+ attachSession(session, sessionId) {
16
+ const trace = {
17
+ id: randomUUID(),
18
+ nodeId: this.nodeId,
19
+ agentId: this.agentId,
20
+ sessionId,
21
+ prompt: this.promptText,
22
+ systemPrompt: typeof session.systemPrompt === 'string' ? session.systemPrompt : undefined,
23
+ model: session.model?.modelId,
24
+ provider: session.model?.provider,
25
+ startedAt: new Date().toISOString(),
26
+ turns: [],
27
+ skillsLoaded: [],
28
+ toolCallCount: 0,
29
+ workflowIteration: this.workflowIteration,
30
+ };
31
+ const active = {
32
+ trace,
33
+ currentTurn: null,
34
+ currentTurnIndex: -1,
35
+ unsubscribe: null,
36
+ };
37
+ active.unsubscribe = session.subscribe((event) => {
38
+ this.handleEvent(sessionId, event);
39
+ });
40
+ this.activeSessions.set(sessionId, active);
41
+ }
42
+ handleEvent(sessionId, event) {
43
+ const active = this.activeSessions.get(sessionId);
44
+ if (!active)
45
+ return;
46
+ switch (event.type) {
47
+ case 'turn_start':
48
+ this.startTurn(sessionId, active, event);
49
+ break;
50
+ case 'turn_end':
51
+ this.endTurn(sessionId, active, event);
52
+ break;
53
+ case 'tool_execution_start':
54
+ this.startToolCall(active, event);
55
+ break;
56
+ case 'tool_execution_end':
57
+ this.endToolCall(active, event);
58
+ break;
59
+ case 'message_end':
60
+ this.captureMessage(active, event);
61
+ break;
62
+ case 'agent_end':
63
+ this.completeTrace(active, event);
64
+ break;
65
+ case 'compaction_start':
66
+ case 'compaction_end':
67
+ case 'auto_retry_start':
68
+ case 'auto_retry_end':
69
+ break;
70
+ }
71
+ }
72
+ startTurn(_sessionId, active, event) {
73
+ const turnIndex = event.turnIndex ?? ++active.currentTurnIndex;
74
+ active.currentTurnIndex = turnIndex;
75
+ active.currentTurn = {
76
+ turnIndex,
77
+ startedAt: new Date().toISOString(),
78
+ toolCalls: [],
79
+ activeToolCalls: new Map(),
80
+ };
81
+ }
82
+ endTurn(_sessionId, active, event) {
83
+ if (!active.currentTurn)
84
+ return;
85
+ const message = event.message;
86
+ const completedAt = new Date().toISOString();
87
+ const durationMs = new Date(completedAt).getTime() - new Date(active.currentTurn.startedAt).getTime();
88
+ let assistantContent = '';
89
+ let thinkingContent = '';
90
+ if (message?.content && Array.isArray(message.content)) {
91
+ for (const part of message.content) {
92
+ if (part.type === 'text' && part.text) {
93
+ assistantContent += part.text;
94
+ }
95
+ else if (part.type === 'thinking' && part.thinking) {
96
+ thinkingContent += part.thinking;
97
+ }
98
+ }
99
+ }
100
+ const turn = {
101
+ turnIndex: active.currentTurn.turnIndex,
102
+ startedAt: active.currentTurn.startedAt,
103
+ completedAt,
104
+ durationMs,
105
+ model: message?.model,
106
+ provider: message?.provider,
107
+ responseModel: message?.responseModel,
108
+ responseId: message?.responseId,
109
+ stopReason: message?.stopReason,
110
+ usage: message?.usage,
111
+ assistantContent: assistantContent || undefined,
112
+ thinkingContent: thinkingContent || undefined,
113
+ toolCalls: [...active.currentTurn.toolCalls],
114
+ };
115
+ active.trace.turns.push(turn);
116
+ active.trace.toolCallCount += turn.toolCalls.length;
117
+ active.currentTurn = null;
118
+ }
119
+ startToolCall(active, event) {
120
+ if (!active.currentTurn)
121
+ return;
122
+ const toolCallId = event.toolCallId;
123
+ const toolName = event.toolName;
124
+ const args = event.args;
125
+ const startedAt = new Date().toISOString();
126
+ active.currentTurn.activeToolCalls.set(toolCallId, {
127
+ toolCallId,
128
+ toolName,
129
+ args,
130
+ startedAt,
131
+ });
132
+ }
133
+ endToolCall(active, event) {
134
+ if (!active.currentTurn)
135
+ return;
136
+ const toolCallId = event.toolCallId;
137
+ const activeTool = active.currentTurn.activeToolCalls.get(toolCallId);
138
+ if (!activeTool)
139
+ return;
140
+ const completedAt = new Date().toISOString();
141
+ const durationMs = new Date(completedAt).getTime() - new Date(activeTool.startedAt).getTime();
142
+ const toolCall = {
143
+ toolCallId: activeTool.toolCallId,
144
+ toolName: activeTool.toolName,
145
+ args: activeTool.args,
146
+ result: event.result,
147
+ isError: event.isError === true,
148
+ startedAt: activeTool.startedAt,
149
+ completedAt,
150
+ durationMs,
151
+ };
152
+ active.currentTurn.toolCalls.push(toolCall);
153
+ active.currentTurn.activeToolCalls.delete(toolCallId);
154
+ if (activeTool.toolName === 'skill' ||
155
+ (activeTool.toolName === 'read' &&
156
+ typeof activeTool.args === 'object' &&
157
+ activeTool.args !== null)) {
158
+ const skillName = this.extractSkillName(activeTool.args, event.result);
159
+ if (skillName && !active.trace.skillsLoaded.includes(skillName)) {
160
+ active.trace.skillsLoaded.push(skillName);
161
+ }
162
+ }
163
+ }
164
+ extractSkillName(args, result) {
165
+ if (typeof args === 'object' && args !== null) {
166
+ const argObj = args;
167
+ if (argObj.skill)
168
+ return argObj.skill;
169
+ if (argObj.name)
170
+ return argObj.name;
171
+ }
172
+ if (typeof result === 'string') {
173
+ const match = result.match(/\/skills\/([^/]+)\/SKILL\.md/i);
174
+ if (match)
175
+ return match[1];
176
+ }
177
+ return undefined;
178
+ }
179
+ captureMessage(active, event) {
180
+ const message = event.message;
181
+ if (message?.usage && !active.trace.totalUsage) {
182
+ active.trace.totalUsage = message.usage;
183
+ }
184
+ }
185
+ completeTrace(active, event) {
186
+ const completedAt = new Date().toISOString();
187
+ active.trace.completedAt = completedAt;
188
+ active.trace.durationMs =
189
+ new Date(completedAt).getTime() - new Date(active.trace.startedAt).getTime();
190
+ if (event.messages && Array.isArray(event.messages)) {
191
+ const lastAssistant = [...event.messages]
192
+ .reverse()
193
+ .find((m) => m.role === 'assistant');
194
+ if (lastAssistant) {
195
+ const usage = lastAssistant.usage;
196
+ if (usage) {
197
+ active.trace.totalUsage = usage;
198
+ }
199
+ }
200
+ }
201
+ active.trace.errorMessage = event.willRetry ? 'Agent ended with retry pending' : undefined;
202
+ }
203
+ finalizeSession(sessionId) {
204
+ const active = this.activeSessions.get(sessionId);
205
+ if (!active)
206
+ return undefined;
207
+ if (active.unsubscribe) {
208
+ active.unsubscribe();
209
+ active.unsubscribe = null;
210
+ }
211
+ if (!active.trace.completedAt) {
212
+ const now = new Date().toISOString();
213
+ active.trace.completedAt = now;
214
+ active.trace.durationMs =
215
+ new Date(now).getTime() - new Date(active.trace.startedAt).getTime();
216
+ }
217
+ this.traces.push(active.trace);
218
+ this.activeSessions.delete(sessionId);
219
+ return active.trace;
220
+ }
221
+ finalizeCurrentTrace() {
222
+ const sessionIds = Array.from(this.activeSessions.keys());
223
+ let lastTrace;
224
+ for (const sessionId of sessionIds) {
225
+ const trace = this.finalizeSession(sessionId);
226
+ if (trace) {
227
+ lastTrace = trace;
228
+ }
229
+ }
230
+ return lastTrace;
231
+ }
232
+ getTraces() {
233
+ return [...this.traces];
234
+ }
235
+ buildWorkflowTrace(workflowName, inputs, startedAt) {
236
+ return {
237
+ id: randomUUID(),
238
+ workflowName,
239
+ startedAt,
240
+ completedAt: new Date().toISOString(),
241
+ inputs,
242
+ agentTraces: [...this.traces],
243
+ };
244
+ }
245
+ clear() {
246
+ this.traces = [];
247
+ for (const active of this.activeSessions.values()) {
248
+ if (active.unsubscribe) {
249
+ active.unsubscribe();
250
+ }
251
+ }
252
+ this.activeSessions.clear();
253
+ }
254
+ }
255
+ //# sourceMappingURL=trace-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-collector.js","sourceRoot":"","sources":["../../src/lib/trace-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WorkflowTrace } from './trace-collector.js';
2
+ export declare function renderTraceHtml(trace: WorkflowTrace): string;
3
+ //# sourceMappingURL=trace-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-html.d.ts","sourceRoot":"","sources":["../../src/lib/trace-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,sBAAsB,CAAC;AAEhG,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA2D5D"}