@diff-review-system/drs 2.2.1 → 3.0.0-rc.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 (240) hide show
  1. package/README.md +228 -92
  2. package/dist/ci/runner.d.ts.map +1 -1
  3. package/dist/ci/runner.js +19 -22
  4. package/dist/ci/runner.js.map +1 -1
  5. package/dist/cli/describe-mr.d.ts.map +1 -1
  6. package/dist/cli/describe-mr.js +39 -20
  7. package/dist/cli/describe-mr.js.map +1 -1
  8. package/dist/cli/describe-pr.d.ts.map +1 -1
  9. package/dist/cli/describe-pr.js +39 -20
  10. package/dist/cli/describe-pr.js.map +1 -1
  11. package/dist/cli/index.js +11 -7
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/init.d.ts.map +1 -1
  14. package/dist/cli/init.js +30 -2
  15. package/dist/cli/init.js.map +1 -1
  16. package/dist/cli/post-comments.d.ts.map +1 -1
  17. package/dist/cli/post-comments.js +5 -5
  18. package/dist/cli/post-comments.js.map +1 -1
  19. package/dist/cli/review-local.d.ts.map +1 -1
  20. package/dist/cli/review-local.integration.test.d.ts +2 -0
  21. package/dist/cli/review-local.integration.test.d.ts.map +1 -0
  22. package/dist/cli/review-local.integration.test.js +343 -0
  23. package/dist/cli/review-local.integration.test.js.map +1 -0
  24. package/dist/cli/review-local.js +5 -4
  25. package/dist/cli/review-local.js.map +1 -1
  26. package/dist/cli/review-local.live.e2e.test.d.ts +2 -0
  27. package/dist/cli/review-local.live.e2e.test.d.ts.map +1 -0
  28. package/dist/cli/review-local.live.e2e.test.js +154 -0
  29. package/dist/cli/review-local.live.e2e.test.js.map +1 -0
  30. package/dist/cli/review-local.test.d.ts +2 -0
  31. package/dist/cli/review-local.test.d.ts.map +1 -0
  32. package/dist/cli/review-local.test.js +164 -0
  33. package/dist/cli/review-local.test.js.map +1 -0
  34. package/dist/cli/review-mr.d.ts +1 -1
  35. package/dist/cli/review-mr.d.ts.map +1 -1
  36. package/dist/cli/review-mr.js +92 -17
  37. package/dist/cli/review-mr.js.map +1 -1
  38. package/dist/cli/review-mr.test.d.ts +2 -0
  39. package/dist/cli/review-mr.test.d.ts.map +1 -0
  40. package/dist/cli/review-mr.test.js +142 -0
  41. package/dist/cli/review-mr.test.js.map +1 -0
  42. package/dist/cli/review-pr.d.ts +1 -1
  43. package/dist/cli/review-pr.d.ts.map +1 -1
  44. package/dist/cli/review-pr.js +96 -13
  45. package/dist/cli/review-pr.js.map +1 -1
  46. package/dist/cli/review-pr.test.d.ts +2 -0
  47. package/dist/cli/review-pr.test.d.ts.map +1 -0
  48. package/dist/cli/review-pr.test.js +137 -0
  49. package/dist/cli/review-pr.test.js.map +1 -0
  50. package/dist/cli/show-changes.js +4 -4
  51. package/dist/github/platform-adapter.js +2 -2
  52. package/dist/gitlab/client.js +1 -1
  53. package/dist/lib/code-quality-report.js +1 -1
  54. package/dist/lib/comment-formatter.d.ts +2 -1
  55. package/dist/lib/comment-formatter.d.ts.map +1 -1
  56. package/dist/lib/comment-formatter.js +33 -1
  57. package/dist/lib/comment-formatter.js.map +1 -1
  58. package/dist/lib/comment-formatter.test.js +43 -0
  59. package/dist/lib/comment-formatter.test.js.map +1 -1
  60. package/dist/lib/comment-manager.d.ts.map +1 -1
  61. package/dist/lib/comment-manager.js +4 -3
  62. package/dist/lib/comment-manager.js.map +1 -1
  63. package/dist/lib/comment-poster.d.ts +2 -1
  64. package/dist/lib/comment-poster.d.ts.map +1 -1
  65. package/dist/lib/comment-poster.js +2 -2
  66. package/dist/lib/comment-poster.js.map +1 -1
  67. package/dist/lib/comment-poster.test.js +27 -11
  68. package/dist/lib/comment-poster.test.js.map +1 -1
  69. package/dist/lib/config-model-overrides.test.d.ts +1 -1
  70. package/dist/lib/config-model-overrides.test.js +2 -2
  71. package/dist/lib/config-model-overrides.test.js.map +1 -1
  72. package/dist/lib/config.d.ts +34 -7
  73. package/dist/lib/config.d.ts.map +1 -1
  74. package/dist/lib/config.js +35 -13
  75. package/dist/lib/config.js.map +1 -1
  76. package/dist/lib/config.test.js +16 -0
  77. package/dist/lib/config.test.js.map +1 -1
  78. package/dist/lib/context-compression.d.ts +27 -1
  79. package/dist/lib/context-compression.d.ts.map +1 -1
  80. package/dist/lib/context-compression.js +106 -4
  81. package/dist/lib/context-compression.js.map +1 -1
  82. package/dist/lib/context-compression.test.js +305 -1
  83. package/dist/lib/context-compression.test.js.map +1 -1
  84. package/dist/lib/context-loader.d.ts +3 -2
  85. package/dist/lib/context-loader.d.ts.map +1 -1
  86. package/dist/lib/context-loader.js +11 -11
  87. package/dist/lib/context-loader.js.map +1 -1
  88. package/dist/lib/description-executor.d.ts +19 -2
  89. package/dist/lib/description-executor.d.ts.map +1 -1
  90. package/dist/lib/description-executor.js +52 -21
  91. package/dist/lib/description-executor.js.map +1 -1
  92. package/dist/lib/description-executor.test.d.ts +2 -0
  93. package/dist/lib/description-executor.test.d.ts.map +1 -0
  94. package/dist/lib/description-executor.test.js +120 -0
  95. package/dist/lib/description-executor.test.js.map +1 -0
  96. package/dist/lib/description-formatter.d.ts +8 -3
  97. package/dist/lib/description-formatter.d.ts.map +1 -1
  98. package/dist/lib/description-formatter.js +88 -13
  99. package/dist/lib/description-formatter.js.map +1 -1
  100. package/dist/lib/description-formatter.test.d.ts +2 -0
  101. package/dist/lib/description-formatter.test.d.ts.map +1 -0
  102. package/dist/lib/description-formatter.test.js +57 -0
  103. package/dist/lib/description-formatter.test.js.map +1 -0
  104. package/dist/lib/diff-parser.test.d.ts +2 -0
  105. package/dist/lib/diff-parser.test.d.ts.map +1 -0
  106. package/dist/lib/diff-parser.test.js +335 -0
  107. package/dist/lib/diff-parser.test.js.map +1 -0
  108. package/dist/lib/exit.d.ts +35 -0
  109. package/dist/lib/exit.d.ts.map +1 -0
  110. package/dist/lib/exit.js +53 -0
  111. package/dist/lib/exit.js.map +1 -0
  112. package/dist/lib/exit.test.d.ts +2 -0
  113. package/dist/lib/exit.test.d.ts.map +1 -0
  114. package/dist/lib/exit.test.js +120 -0
  115. package/dist/lib/exit.test.js.map +1 -0
  116. package/dist/lib/format-utils.d.ts +3 -0
  117. package/dist/lib/format-utils.d.ts.map +1 -0
  118. package/dist/lib/format-utils.js +7 -0
  119. package/dist/lib/format-utils.js.map +1 -0
  120. package/dist/lib/json-output.d.ts +4 -1
  121. package/dist/lib/json-output.d.ts.map +1 -1
  122. package/dist/lib/json-output.js +2 -1
  123. package/dist/lib/json-output.js.map +1 -1
  124. package/dist/lib/json-output.test.d.ts +2 -0
  125. package/dist/lib/json-output.test.d.ts.map +1 -0
  126. package/dist/lib/json-output.test.js +135 -0
  127. package/dist/lib/json-output.test.js.map +1 -0
  128. package/dist/lib/logger.d.ts +10 -2
  129. package/dist/lib/logger.d.ts.map +1 -1
  130. package/dist/lib/logger.js +22 -4
  131. package/dist/lib/logger.js.map +1 -1
  132. package/dist/lib/logger.test.d.ts +2 -0
  133. package/dist/lib/logger.test.d.ts.map +1 -0
  134. package/dist/lib/logger.test.js +324 -0
  135. package/dist/lib/logger.test.js.map +1 -0
  136. package/dist/lib/position-validator.test.d.ts +2 -0
  137. package/dist/lib/position-validator.test.d.ts.map +1 -0
  138. package/dist/lib/position-validator.test.js +128 -0
  139. package/dist/lib/position-validator.test.js.map +1 -0
  140. package/dist/lib/repository-validator.js +1 -1
  141. package/dist/lib/review-core.d.ts +9 -4
  142. package/dist/lib/review-core.d.ts.map +1 -1
  143. package/dist/lib/review-core.js +207 -112
  144. package/dist/lib/review-core.js.map +1 -1
  145. package/dist/lib/review-core.test.js +76 -30
  146. package/dist/lib/review-core.test.js.map +1 -1
  147. package/dist/lib/review-orchestrator.d.ts +12 -7
  148. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  149. package/dist/lib/review-orchestrator.js +78 -22
  150. package/dist/lib/review-orchestrator.js.map +1 -1
  151. package/dist/lib/review-orchestrator.test.js +160 -42
  152. package/dist/lib/review-orchestrator.test.js.map +1 -1
  153. package/dist/lib/review-parser.test.d.ts +2 -0
  154. package/dist/lib/review-parser.test.d.ts.map +1 -0
  155. package/dist/lib/review-parser.test.js +130 -0
  156. package/dist/lib/review-parser.test.js.map +1 -0
  157. package/dist/lib/review-usage.d.ts +32 -0
  158. package/dist/lib/review-usage.d.ts.map +1 -0
  159. package/dist/lib/review-usage.js +72 -0
  160. package/dist/lib/review-usage.js.map +1 -0
  161. package/dist/lib/review-usage.test.d.ts +2 -0
  162. package/dist/lib/review-usage.test.d.ts.map +1 -0
  163. package/dist/lib/review-usage.test.js +83 -0
  164. package/dist/lib/review-usage.test.js.map +1 -0
  165. package/dist/lib/unified-review-executor.d.ts +6 -2
  166. package/dist/lib/unified-review-executor.d.ts.map +1 -1
  167. package/dist/lib/unified-review-executor.js +54 -28
  168. package/dist/lib/unified-review-executor.js.map +1 -1
  169. package/dist/lib/unified-review-executor.test.js +138 -16
  170. package/dist/lib/unified-review-executor.test.js.map +1 -1
  171. package/dist/lib/write-json-output.test.d.ts +2 -0
  172. package/dist/lib/write-json-output.test.d.ts.map +1 -0
  173. package/dist/lib/write-json-output.test.js +259 -0
  174. package/dist/lib/write-json-output.test.js.map +1 -0
  175. package/dist/pi/sdk.d.ts +94 -0
  176. package/dist/pi/sdk.d.ts.map +1 -0
  177. package/dist/pi/sdk.js +486 -0
  178. package/dist/pi/sdk.js.map +1 -0
  179. package/dist/pi/sdk.test.d.ts +2 -0
  180. package/dist/pi/sdk.test.d.ts.map +1 -0
  181. package/dist/pi/sdk.test.js +331 -0
  182. package/dist/pi/sdk.test.js.map +1 -0
  183. package/dist/{opencode → runtime}/agent-loader.d.ts +7 -5
  184. package/dist/runtime/agent-loader.d.ts.map +1 -0
  185. package/dist/{opencode → runtime}/agent-loader.js +24 -19
  186. package/dist/runtime/agent-loader.js.map +1 -0
  187. package/dist/runtime/agent-loader.test.d.ts +2 -0
  188. package/dist/runtime/agent-loader.test.d.ts.map +1 -0
  189. package/dist/runtime/agent-loader.test.js +280 -0
  190. package/dist/runtime/agent-loader.test.js.map +1 -0
  191. package/dist/runtime/built-in-paths.d.ts +2 -0
  192. package/dist/runtime/built-in-paths.d.ts.map +1 -0
  193. package/dist/runtime/built-in-paths.js +14 -0
  194. package/dist/runtime/built-in-paths.js.map +1 -0
  195. package/dist/{opencode → runtime}/client.d.ts +35 -18
  196. package/dist/runtime/client.d.ts.map +1 -0
  197. package/dist/runtime/client.js +486 -0
  198. package/dist/runtime/client.js.map +1 -0
  199. package/dist/{opencode → runtime}/client.test.d.ts.map +1 -1
  200. package/dist/runtime/client.test.js +392 -0
  201. package/dist/runtime/client.test.js.map +1 -0
  202. package/dist/runtime/path-config.d.ts +8 -0
  203. package/dist/runtime/path-config.d.ts.map +1 -0
  204. package/dist/runtime/path-config.js +68 -0
  205. package/dist/runtime/path-config.js.map +1 -0
  206. package/dist/runtime/path-config.test.d.ts +2 -0
  207. package/dist/runtime/path-config.test.d.ts.map +1 -0
  208. package/dist/runtime/path-config.test.js +103 -0
  209. package/dist/runtime/path-config.test.js.map +1 -0
  210. package/package.json +5 -5
  211. package/.opencode/opencode.jsonc +0 -15
  212. package/.opencode/tool/write_json_output.ts +0 -24
  213. package/.opencode/tools/drs_skill.ts +0 -67
  214. package/dist/lib/skills-prompt.d.ts +0 -3
  215. package/dist/lib/skills-prompt.d.ts.map +0 -1
  216. package/dist/lib/skills-prompt.js +0 -70
  217. package/dist/lib/skills-prompt.js.map +0 -1
  218. package/dist/opencode/agent-loader.d.ts.map +0 -1
  219. package/dist/opencode/agent-loader.js.map +0 -1
  220. package/dist/opencode/client.d.ts.map +0 -1
  221. package/dist/opencode/client.js +0 -456
  222. package/dist/opencode/client.js.map +0 -1
  223. package/dist/opencode/client.test.js +0 -317
  224. package/dist/opencode/client.test.js.map +0 -1
  225. package/dist/opencode/opencode-paths.d.ts +0 -2
  226. package/dist/opencode/opencode-paths.d.ts.map +0 -1
  227. package/dist/opencode/opencode-paths.js +0 -7
  228. package/dist/opencode/opencode-paths.js.map +0 -1
  229. package/dist/opencode/skill-loader.d.ts +0 -15
  230. package/dist/opencode/skill-loader.d.ts.map +0 -1
  231. package/dist/opencode/skill-loader.js +0 -88
  232. package/dist/opencode/skill-loader.js.map +0 -1
  233. /package/{.opencode/agent → .pi/agents}/describe/pr-describer.md +0 -0
  234. /package/{.opencode/agent → .pi/agents}/review/documentation.md +0 -0
  235. /package/{.opencode/agent → .pi/agents}/review/performance.md +0 -0
  236. /package/{.opencode/agent → .pi/agents}/review/quality.md +0 -0
  237. /package/{.opencode/agent → .pi/agents}/review/security.md +0 -0
  238. /package/{.opencode/agent → .pi/agents}/review/style.md +0 -0
  239. /package/{.opencode/agent → .pi/agents}/review/unified-reviewer.md +0 -0
  240. /package/dist/{opencode → runtime}/client.test.d.ts +0 -0
@@ -5,54 +5,21 @@
5
5
  * between review-orchestrator.ts (local) and unified-review-executor.ts (platform).
6
6
  */
7
7
  import chalk from 'chalk';
8
- import { getAgentNames } from './config.js';
8
+ import { getAgentNames, getDefaultSkills, normalizeAgentConfig } from './config.js';
9
9
  import { buildReviewPrompt } from './context-loader.js';
10
- import { buildSkillPromptSection } from './skills-prompt.js';
11
10
  import { parseReviewIssues } from './issue-parser.js';
12
11
  import { parseReviewOutput } from './review-parser.js';
13
12
  import { calculateSummary } from './comment-formatter.js';
14
- import { loadReviewAgents } from '../opencode/agent-loader.js';
13
+ import { loadReviewAgents } from '../runtime/agent-loader.js';
15
14
  import { createIssueFingerprint } from './comment-manager.js';
16
15
  import { getLogger } from './logger.js';
16
+ import { aggregateAgentUsage, applyUsageMessage, createAgentUsageSummary, } from './review-usage.js';
17
17
  const REVIEW_SEVERITY_ORDER = {
18
18
  LOW: 1,
19
19
  MEDIUM: 2,
20
20
  HIGH: 3,
21
21
  CRITICAL: 4,
22
22
  };
23
- /**
24
- * Try to parse a tool message as a drs_skill tool result
25
- * Returns the skill info if it's a skill tool call, null otherwise
26
- */
27
- function parseSkillToolResult(content) {
28
- try {
29
- const parsed = JSON.parse(content);
30
- // Check for the _tool identifier we added
31
- if (parsed._tool === 'drs_skill' && parsed.skill_name) {
32
- return {
33
- skillName: parsed.skill_name,
34
- hasInstructions: Boolean(parsed.instructions),
35
- hasScripts: Boolean(parsed.has_scripts),
36
- hasReferences: Boolean(parsed.has_references),
37
- hasAssets: Boolean(parsed.has_assets),
38
- };
39
- }
40
- // Fallback: check for skill_name field even without _tool marker
41
- if (parsed.skill_name && parsed.instructions !== undefined) {
42
- return {
43
- skillName: parsed.skill_name,
44
- hasInstructions: Boolean(parsed.instructions),
45
- hasScripts: Boolean(parsed.has_scripts),
46
- hasReferences: Boolean(parsed.has_references),
47
- hasAssets: Boolean(parsed.has_assets),
48
- };
49
- }
50
- }
51
- catch {
52
- // Not JSON or not a skill tool result
53
- }
54
- return null;
55
- }
56
23
  /**
57
24
  * Build base review instructions for agents
58
25
  *
@@ -123,16 +90,17 @@ ${compressionSummary ? `${compressionSummary}\n\n` : ''}Output requirements:
123
90
  ]
124
91
  }
125
92
 
126
- **Instructions:**
127
- 1. Analyze the diff content above to understand what lines were changed
128
- 2. Use the Read tool to examine the full file for additional context if needed
93
+ **Analysis approach:**
94
+ 1. First, use Grep or Read to quickly understand the project's existing patterns relevant to the changed files (e.g., existing validation, error handling, auth patterns, naming conventions).
95
+ 2. Then analyze the diff content above against those established patterns.
96
+
97
+ **Review rules:**
129
98
  3. **IMPORTANT: Only report issues on lines that were actually changed or added (lines starting with + in the diff).** Do not report issues on unchanged code.
130
- 4. Analyze the changed code for issues in your specialty area
99
+ 4. Only flag deviations or new risks introduced by the changes.
131
100
  5. Populate summary counts based on the issues you report (use 0 when none).
132
101
  6. Focus on the changes - only report issues for newly added or modified lines (lines with + prefix in the diff).`;
133
102
  }
134
- // No diff content available - fall back to git diff command
135
- const fallbackCommand = diffCommand || 'git diff HEAD~1 -- <file>';
103
+ // No diff content available - instruct agent to read files directly
136
104
  return `Review the following changed files from ${label}:
137
105
 
138
106
  ${fileList}
@@ -181,8 +149,8 @@ Output requirements:
181
149
  }
182
150
 
183
151
  **Instructions:**
184
- 1. First, use the Bash tool to run \`${fallbackCommand}\` to see what lines were actually changed
185
- 2. Use the Read tool to examine the full file for context
152
+ 1. The diffs for these files were omitted due to size constraints. Use the Read tool to examine the changed files listed above.
153
+ 2. Focus your review on newly added or modified code patterns.
186
154
  3. **IMPORTANT: Only report issues on lines that were actually changed or added.** Do not report issues on existing code that was not modified.
187
155
  4. Analyze the changed code for issues in your specialty area
188
156
  5. Populate summary counts based on the issues you report (use 0 when none).
@@ -193,27 +161,29 @@ Output requirements:
193
161
  */
194
162
  function getConfiguredAgentInfo(config, workingDir) {
195
163
  const configuredNames = getAgentNames(config);
196
- const allAgents = loadReviewAgents(workingDir);
164
+ const allAgents = loadReviewAgents(workingDir, config);
197
165
  return configuredNames
198
166
  .map((name) => {
199
167
  const fullName = `review/${name}`;
200
168
  const agent = allAgents.find((a) => a.name === fullName);
201
169
  return {
202
170
  name,
203
- description: agent?.description || `${name} review agent`,
171
+ description: agent?.description ?? `${name} review agent`,
204
172
  };
205
173
  })
206
174
  .filter((a) => a !== null);
207
175
  }
208
- function renderAgentMessage(content, maxLines = 6, maxChars = 320) {
209
- const trimmed = content.trim();
210
- if (!trimmed) {
211
- return '';
176
+ function validateConfiguredReviewAgents(config, workingDir) {
177
+ const configuredNames = getAgentNames(config);
178
+ const availableAgents = new Set(loadReviewAgents(workingDir, config)
179
+ .filter((agent) => agent.name.startsWith('review/'))
180
+ .map((agent) => agent.name.replace(/^review\//, '')));
181
+ const missingAgents = configuredNames.filter((name) => !availableAgents.has(name));
182
+ if (missingAgents.length === 0) {
183
+ return;
212
184
  }
213
- const lines = trimmed.split('\n');
214
- const limitedLines = lines.slice(0, maxLines).join('\n');
215
- const limitedChars = limitedLines.length > maxChars ? `${limitedLines.slice(0, maxChars)}…` : limitedLines;
216
- return limitedChars;
185
+ const availableList = Array.from(availableAgents).sort();
186
+ throw new Error(`Unknown review agent(s) configured: ${missingAgents.join(', ')}. Available agents: ${availableList.join(', ')}`);
217
187
  }
218
188
  function resolveReviewMode(config) {
219
189
  return config.review.mode ?? 'multi-agent';
@@ -234,14 +204,85 @@ function mergeIssues(primary, secondary) {
234
204
  }
235
205
  return merged;
236
206
  }
237
- export async function runUnifiedReviewAgent(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
207
+ function summarizeRunUsage(agentResults) {
208
+ const agentUsage = agentResults
209
+ .map((result) => {
210
+ const usage = result.usage ?? createAgentUsageSummary(result.agentType);
211
+ return {
212
+ ...usage,
213
+ success: result.success,
214
+ };
215
+ })
216
+ .sort((a, b) => a.agentType.localeCompare(b.agentType));
217
+ return aggregateAgentUsage(agentUsage);
218
+ }
219
+ function getConfiguredSkillsForAgent(config, agentType) {
220
+ const defaultSkills = getDefaultSkills(config);
221
+ const normalizedAgents = normalizeAgentConfig(config.review.agents);
222
+ const agentConfig = normalizedAgents.find((agent) => agent.name === agentType || agent.name === `review/${agentType}`);
223
+ const agentSkills = (agentConfig?.skills ?? []).map(String).filter((skill) => skill.length > 0);
224
+ return [...new Set([...defaultSkills, ...agentSkills])];
225
+ }
226
+ /**
227
+ * Detect skill loading from Pi's native flow.
228
+ *
229
+ * Pi agents load skills by reading SKILL.md files via the `read` tool.
230
+ * This matches tool output that contains a SKILL.md path and returns
231
+ * the skill name (parent directory name of SKILL.md).
232
+ */
233
+ function extractSkillNameFromReadToolOutput(toolName, content) {
234
+ if (toolName !== 'read')
235
+ return undefined;
236
+ // Match a path ending in /skills/<name>/SKILL.md (case-insensitive)
237
+ const match = content.match(/(?:^|\n)\s*---\s*\n[\s\S]*?name:\s*([\w.-]+)[\s\S]*?---/i);
238
+ if (match?.[1])
239
+ return match[1];
240
+ return undefined;
241
+ }
242
+ function extractSkillNameFromToolOutput(content) {
243
+ const trimmed = content.trim();
244
+ if (!trimmed) {
245
+ return undefined;
246
+ }
247
+ try {
248
+ const parsed = JSON.parse(trimmed);
249
+ if (parsed && typeof parsed === 'object') {
250
+ const record = parsed;
251
+ const candidateKeys = ['name', 'skill', 'skillName', 'id'];
252
+ for (const key of candidateKeys) {
253
+ const value = record[key];
254
+ if (typeof value === 'string' && value.trim().length > 0) {
255
+ return value.trim();
256
+ }
257
+ }
258
+ }
259
+ }
260
+ catch {
261
+ // Fall through to regex extraction for plain text outputs.
262
+ }
263
+ const match = trimmed.match(/(?:^|\b)(?:skill|name)\s*[:=]\s*["']?([\w.-]+)["']?/i);
264
+ if (match?.[1]) {
265
+ return match[1];
266
+ }
267
+ if (/^[\w.-]+$/.test(trimmed)) {
268
+ return trimmed;
269
+ }
270
+ return undefined;
271
+ }
272
+ export async function runUnifiedReviewAgent(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
238
273
  const agentType = 'unified-reviewer';
239
274
  const agentName = `review/${agentType}`;
240
275
  console.log(chalk.bold('🎯 Selected Agents: unified-reviewer\n'));
241
276
  console.log(chalk.gray('Running unified review...\n'));
277
+ let agentUsage = createAgentUsageSummary(agentType);
278
+ const configuredSkills = getConfiguredSkillsForAgent(config, agentType);
279
+ let sawSkillToolCall = false;
280
+ const describeSummary = typeof additionalContext.describeSummary === 'string'
281
+ ? additionalContext.describeSummary
282
+ : undefined;
242
283
  try {
243
- const skillPrompt = buildSkillPromptSection(config, agentType, workingDir);
244
- const reviewPrompt = buildReviewPrompt(agentType, baseInstructions, reviewLabel, filteredFiles, workingDir, skillPrompt);
284
+ const reviewPrompt = buildReviewPrompt(agentType, baseInstructions, reviewLabel, filteredFiles, workingDir, config, describeSummary);
285
+ const logger = getLogger();
245
286
  if (debug) {
246
287
  console.log(chalk.gray('┌── DEBUG: Message sent to review agent'));
247
288
  console.log(chalk.gray(`│ Agent: ${agentName}`));
@@ -251,7 +292,10 @@ export async function runUnifiedReviewAgent(opencode, config, baseInstructions,
251
292
  console.log(chalk.gray('─'.repeat(60)));
252
293
  console.log(chalk.gray(`└── End message for ${agentName}\n`));
253
294
  }
254
- const session = await opencode.createSession({
295
+ else {
296
+ logger.agentInput(agentType, reviewPrompt);
297
+ }
298
+ const session = await runtime.createSession({
255
299
  agent: agentName,
256
300
  message: reviewPrompt,
257
301
  context: {
@@ -261,26 +305,25 @@ export async function runUnifiedReviewAgent(opencode, config, baseInstructions,
261
305
  });
262
306
  const agentIssues = [];
263
307
  let fullResponse = '';
264
- const skillCalls = [];
265
- const logger = getLogger();
266
- for await (const message of opencode.streamMessages(session.id)) {
308
+ for await (const message of runtime.streamMessages(session.id)) {
267
309
  if (message.role === 'tool') {
268
- // Check if this is a skill tool call
269
- const skillResult = parseSkillToolResult(message.content);
270
- if (skillResult) {
271
- skillCalls.push(skillResult);
272
- logger.skillLoaded(skillResult.skillName, agentType, {
273
- hasScripts: skillResult.hasScripts,
274
- hasReferences: skillResult.hasReferences,
275
- hasAssets: skillResult.hasAssets,
276
- });
310
+ // Detect skill loading: legacy 'skill' tool or Pi-native read of SKILL.md
311
+ const skillFromLegacy = message.toolName === 'skill'
312
+ ? extractSkillNameFromToolOutput(message.content)
313
+ : undefined;
314
+ const skillFromRead = extractSkillNameFromReadToolOutput(message.toolName, message.content);
315
+ const skillName = skillFromLegacy ?? skillFromRead;
316
+ if (skillName) {
317
+ logger.skillLoaded(skillName, agentType);
318
+ sawSkillToolCall = true;
277
319
  }
278
320
  else {
279
- logger.toolOutput('unknown', agentType, message.content);
321
+ logger.toolOutput(message.toolName ?? 'unknown', agentType, message.content);
280
322
  }
281
323
  continue;
282
324
  }
283
325
  if (message.role === 'assistant') {
326
+ agentUsage = applyUsageMessage(agentUsage, message);
284
327
  if (!message.content.trim()) {
285
328
  continue;
286
329
  }
@@ -291,18 +334,14 @@ export async function runUnifiedReviewAgent(opencode, config, baseInstructions,
291
334
  console.log(chalk.gray(`└── End response for ${agentName}\n`));
292
335
  }
293
336
  else {
294
- const snippet = renderAgentMessage(message.content);
295
- if (snippet) {
296
- console.log(chalk.gray(`[unified] ${snippet}\n`));
297
- }
337
+ logger.agentMessage(agentType, message.content);
298
338
  }
299
339
  }
300
340
  }
301
- await opencode.closeSession(session.id);
302
- // Log skill usage summary if no skills were used (warning)
303
- if (skillCalls.length === 0) {
341
+ if (configuredSkills.length > 0 && !sawSkillToolCall) {
304
342
  logger.noSkillCalls(agentType);
305
343
  }
344
+ await runtime.closeSession(session.id);
306
345
  try {
307
346
  const reviewOutput = await parseReviewOutput(workingDir, debug, fullResponse);
308
347
  const parsedIssues = parseReviewIssues(JSON.stringify(reviewOutput), 'unified');
@@ -320,25 +359,50 @@ export async function runUnifiedReviewAgent(opencode, config, baseInstructions,
320
359
  throw new Error(`Unified review agent did not return valid JSON output${reason}`);
321
360
  }
322
361
  const summary = calculateSummary(filteredFiles.length, agentIssues);
362
+ const agentResults = [
363
+ {
364
+ agentType,
365
+ success: true,
366
+ issues: agentIssues,
367
+ usage: {
368
+ ...agentUsage,
369
+ success: true,
370
+ },
371
+ },
372
+ ];
323
373
  return {
324
374
  issues: agentIssues,
325
375
  summary,
326
376
  filesReviewed: filteredFiles.length,
327
- agentResults: [{ agentType, success: true, issues: agentIssues }],
377
+ agentResults,
378
+ usage: summarizeRunUsage(agentResults),
328
379
  };
329
380
  }
330
381
  catch (error) {
331
382
  console.error(chalk.red(`✗ unified-reviewer agent failed: ${error}`));
383
+ const agentResults = [
384
+ {
385
+ agentType,
386
+ success: false,
387
+ issues: [],
388
+ usage: {
389
+ ...agentUsage,
390
+ success: false,
391
+ },
392
+ },
393
+ ];
332
394
  return {
333
395
  issues: [],
334
396
  summary: calculateSummary(filteredFiles.length, []),
335
397
  filesReviewed: filteredFiles.length,
336
- agentResults: [{ agentType, success: false, issues: [] }],
398
+ agentResults,
399
+ usage: summarizeRunUsage(agentResults),
337
400
  };
338
401
  }
339
402
  }
340
- export async function runReviewAgents(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
403
+ export async function runReviewAgents(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
341
404
  console.log(chalk.gray('Starting code analysis...\n'));
405
+ validateConfiguredReviewAgents(config, workingDir);
342
406
  const configuredAgentInfo = getConfiguredAgentInfo(config, workingDir);
343
407
  if (configuredAgentInfo.length > 0) {
344
408
  console.log(chalk.bold('🧰 Available Review Agents'));
@@ -350,13 +414,19 @@ export async function runReviewAgents(opencode, config, baseInstructions, review
350
414
  const agentNames = getAgentNames(config);
351
415
  console.log(chalk.bold(`🎯 Selected Agents: ${agentNames.join(', ') || 'None'}\n`));
352
416
  const agentResults = [];
417
+ const describeSummary = typeof additionalContext.describeSummary === 'string'
418
+ ? additionalContext.describeSummary
419
+ : undefined;
353
420
  for (const agentType of agentNames) {
354
421
  const agentName = `review/${agentType}`;
355
422
  console.log(chalk.gray(`Running ${agentType} review...\n`));
423
+ let agentUsage = createAgentUsageSummary(agentType);
424
+ const configuredSkills = getConfiguredSkillsForAgent(config, agentType);
425
+ let sawSkillToolCall = false;
356
426
  try {
357
427
  // Build prompt with global and agent-specific context
358
- const skillPrompt = buildSkillPromptSection(config, agentType, workingDir);
359
- const reviewPrompt = buildReviewPrompt(agentType, baseInstructions, reviewLabel, filteredFiles, workingDir, skillPrompt);
428
+ const reviewPrompt = buildReviewPrompt(agentType, baseInstructions, reviewLabel, filteredFiles, workingDir, config, describeSummary);
429
+ const logger = getLogger();
360
430
  if (debug) {
361
431
  console.log(chalk.gray('┌── DEBUG: Message sent to review agent'));
362
432
  console.log(chalk.gray(`│ Agent: ${agentName}`));
@@ -366,7 +436,10 @@ export async function runReviewAgents(opencode, config, baseInstructions, review
366
436
  console.log(chalk.gray('─'.repeat(60)));
367
437
  console.log(chalk.gray(`└── End message for ${agentName}\n`));
368
438
  }
369
- const session = await opencode.createSession({
439
+ else {
440
+ logger.agentInput(agentType, reviewPrompt);
441
+ }
442
+ const session = await runtime.createSession({
370
443
  agent: agentName,
371
444
  message: reviewPrompt,
372
445
  context: {
@@ -376,27 +449,26 @@ export async function runReviewAgents(opencode, config, baseInstructions, review
376
449
  });
377
450
  const agentIssues = [];
378
451
  let fullResponse = '';
379
- const skillCalls = [];
380
- const logger = getLogger();
381
452
  // Collect results from this agent
382
- for await (const message of opencode.streamMessages(session.id)) {
453
+ for await (const message of runtime.streamMessages(session.id)) {
383
454
  if (message.role === 'tool') {
384
- // Check if this is a skill tool call
385
- const skillResult = parseSkillToolResult(message.content);
386
- if (skillResult) {
387
- skillCalls.push(skillResult);
388
- logger.skillLoaded(skillResult.skillName, agentType, {
389
- hasScripts: skillResult.hasScripts,
390
- hasReferences: skillResult.hasReferences,
391
- hasAssets: skillResult.hasAssets,
392
- });
455
+ // Detect skill loading: legacy 'skill' tool or Pi-native read of SKILL.md
456
+ const skillFromLegacy = message.toolName === 'skill'
457
+ ? extractSkillNameFromToolOutput(message.content)
458
+ : undefined;
459
+ const skillFromRead = extractSkillNameFromReadToolOutput(message.toolName, message.content);
460
+ const skillName = skillFromLegacy ?? skillFromRead;
461
+ if (skillName) {
462
+ logger.skillLoaded(skillName, agentType);
463
+ sawSkillToolCall = true;
393
464
  }
394
465
  else {
395
- logger.toolOutput('unknown', agentType, message.content);
466
+ logger.toolOutput(message.toolName ?? 'unknown', agentType, message.content);
396
467
  }
397
468
  continue;
398
469
  }
399
470
  if (message.role === 'assistant') {
471
+ agentUsage = applyUsageMessage(agentUsage, message);
400
472
  if (!message.content.trim()) {
401
473
  continue;
402
474
  }
@@ -407,29 +479,41 @@ export async function runReviewAgents(opencode, config, baseInstructions, review
407
479
  console.log(chalk.gray(`└── End response for ${agentName}\n`));
408
480
  }
409
481
  else {
410
- const snippet = renderAgentMessage(message.content);
411
- if (snippet) {
412
- console.log(chalk.gray(`[${agentType}] ${snippet}\n`));
413
- }
482
+ logger.agentMessage(agentType, message.content);
414
483
  }
415
484
  }
416
485
  }
417
- await opencode.closeSession(session.id);
418
- // Log skill usage summary if no skills were used (warning)
419
- if (skillCalls.length === 0) {
486
+ if (configuredSkills.length > 0 && !sawSkillToolCall) {
420
487
  logger.noSkillCalls(agentType);
421
488
  }
489
+ await runtime.closeSession(session.id);
422
490
  const reviewOutput = await parseReviewOutput(workingDir, debug, fullResponse);
423
491
  const parsedIssues = parseReviewIssues(JSON.stringify(reviewOutput), agentType);
424
492
  if (parsedIssues.length > 0) {
425
493
  agentIssues.push(...parsedIssues);
426
494
  console.log(chalk.green(`✓ [${agentType}] Found ${parsedIssues.length} issue(s)`));
427
495
  }
428
- agentResults.push({ agentType, success: true, issues: agentIssues });
496
+ agentResults.push({
497
+ agentType,
498
+ success: true,
499
+ issues: agentIssues,
500
+ usage: {
501
+ ...agentUsage,
502
+ success: true,
503
+ },
504
+ });
429
505
  }
430
506
  catch (error) {
431
507
  console.error(chalk.red(`✗ ${agentType} agent failed: ${error}`));
432
- agentResults.push({ agentType, success: false, issues: [] });
508
+ agentResults.push({
509
+ agentType,
510
+ success: false,
511
+ issues: [],
512
+ usage: {
513
+ ...agentUsage,
514
+ success: false,
515
+ },
516
+ });
433
517
  }
434
518
  }
435
519
  // Check agent results
@@ -456,17 +540,18 @@ export async function runReviewAgents(opencode, config, baseInstructions, review
456
540
  summary,
457
541
  filesReviewed: filteredFiles.length,
458
542
  agentResults,
543
+ usage: summarizeRunUsage(agentResults),
459
544
  };
460
545
  }
461
- export async function runReviewPipeline(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
546
+ export async function runReviewPipeline(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext = {}, workingDir = process.cwd(), debug = false) {
462
547
  const mode = resolveReviewMode(config);
463
548
  if (mode === 'unified') {
464
- return runUnifiedReviewAgent(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
549
+ return runUnifiedReviewAgent(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
465
550
  }
466
551
  if (mode === 'multi-agent') {
467
- return runReviewAgents(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
552
+ return runReviewAgents(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
468
553
  }
469
- const unifiedResult = await runUnifiedReviewAgent(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
554
+ const unifiedResult = await runUnifiedReviewAgent(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
470
555
  const unifiedSuccess = unifiedResult.agentResults.every((result) => result.success);
471
556
  const threshold = config.review.unified?.severityThreshold ?? 'HIGH';
472
557
  const shouldEscalate = unifiedSuccess
@@ -482,14 +567,16 @@ export async function runReviewPipeline(opencode, config, baseInstructions, revi
482
567
  else {
483
568
  console.log(chalk.yellow('Hybrid mode: escalating to deep review agents.\n'));
484
569
  }
485
- const deepResult = await runReviewAgents(opencode, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
570
+ const deepResult = await runReviewAgents(runtime, config, baseInstructions, reviewLabel, filteredFiles, additionalContext, workingDir, debug);
486
571
  const mergedIssues = mergeIssues(unifiedResult.issues, deepResult.issues);
487
572
  const summary = calculateSummary(filteredFiles.length, mergedIssues);
573
+ const combinedAgentResults = [...unifiedResult.agentResults, ...deepResult.agentResults];
488
574
  return {
489
575
  issues: mergedIssues,
490
576
  summary,
491
577
  filesReviewed: filteredFiles.length,
492
- agentResults: [...unifiedResult.agentResults, ...deepResult.agentResults],
578
+ agentResults: combinedAgentResults,
579
+ usage: summarizeRunUsage(combinedAgentResults),
493
580
  };
494
581
  }
495
582
  /**
@@ -512,6 +599,14 @@ export function displayReviewSummary(result) {
512
599
  }
513
600
  console.log(` Files reviewed: ${chalk.cyan(result.summary.filesReviewed)}`);
514
601
  console.log(` Issues found: ${chalk.yellow(result.summary.issuesFound)}`);
602
+ if (result.usage) {
603
+ console.log(` Tokens (input/output): ${chalk.cyan(`${result.usage.total.input}/${result.usage.total.output}`)}`);
604
+ console.log(` Total tokens: ${chalk.cyan(result.usage.total.totalTokens)}`);
605
+ console.log(` Estimated cost: ${chalk.cyan(`$${result.usage.total.cost.toFixed(4)}`)}`);
606
+ if (result.usage.total.totalTokens > 0 && result.usage.total.cost === 0) {
607
+ console.log(chalk.gray(' Cost is $0.0000 because model pricing is unknown or configured as free. Configure pricing.models to override.'));
608
+ }
609
+ }
515
610
  if (result.summary.issuesFound > 0) {
516
611
  console.log(` 🔴 Critical: ${chalk.red(result.summary.bySeverity.CRITICAL)}`);
517
612
  console.log(` 🟡 High: ${chalk.yellow(result.summary.bySeverity.HIGH)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"review-core.js","sourceRoot":"","sources":["../../src/lib/review-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-core.js","sourceRoot":"","sources":["../../src/lib/review-core.ts"],"names":[],"mappings":"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"}