@triedotdev/mcp 1.0.93 → 1.0.97
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.
- package/README.md +145 -137
- package/dist/chunk-APMV77PU.js +313 -0
- package/dist/chunk-APMV77PU.js.map +1 -0
- package/dist/{chunk-MZI46HQT.js → chunk-B3MNN3XB.js} +13 -18
- package/dist/{chunk-MZI46HQT.js.map → chunk-B3MNN3XB.js.map} +1 -1
- package/dist/{chunk-5Z7O66DE.js → chunk-F4NJ4CBP.js} +2 -2
- package/dist/{chunk-YTJXD664.js → chunk-FNCCZ3XB.js} +1222 -75
- package/dist/chunk-FNCCZ3XB.js.map +1 -0
- package/dist/chunk-G76DYVGX.js +136 -0
- package/dist/chunk-G76DYVGX.js.map +1 -0
- package/dist/chunk-HSNE46VE.js +956 -0
- package/dist/chunk-HSNE46VE.js.map +1 -0
- package/dist/{chunk-LVVG2DMW.js → chunk-IXO4G4D3.js} +2 -2
- package/dist/{chunk-LP4MVJDW.js → chunk-JDHR5BDR.js} +2 -3
- package/dist/chunk-NIASHOAB.js +1304 -0
- package/dist/chunk-NIASHOAB.js.map +1 -0
- package/dist/{chunk-NMGINYYX.js → chunk-OVRG5RP3.js} +6 -7
- package/dist/chunk-OVRG5RP3.js.map +1 -0
- package/dist/{chunk-T5UOH56R.js → chunk-R3I2GCZC.js} +3 -3
- package/dist/{chunk-RDOJCRKJ.js → chunk-R4AAPFXC.js} +2 -2
- package/dist/{chunk-R6AUYN3R.js → chunk-SLL2MDJD.js} +786 -4668
- package/dist/chunk-SLL2MDJD.js.map +1 -0
- package/dist/cli/create-agent.js +931 -7
- package/dist/cli/create-agent.js.map +1 -1
- package/dist/cli/main.js +151 -383
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/yolo-daemon.js +13 -20
- package/dist/cli/yolo-daemon.js.map +1 -1
- package/dist/{goal-manager-ESJCJXFS.js → goal-manager-LAOT4QQX.js} +6 -6
- package/dist/guardian-agent-M352CBE5.js +19 -0
- package/dist/index.js +1025 -1550
- package/dist/index.js.map +1 -1
- package/dist/{issue-store-JZ2LCQEG.js → issue-store-W2X33X2X.js} +4 -4
- package/dist/{progress-PH6NNWZM.js → progress-PQVEM7BR.js} +2 -2
- package/dist/{vibe-code-signatures-K4UIWKJZ.js → vibe-code-signatures-ELEWJFGZ.js} +3 -3
- package/dist/{vulnerability-signatures-ZKVLMBRG.js → vulnerability-signatures-EIJQX2TS.js} +3 -3
- package/dist/workers/agent-worker.js +2 -11
- package/dist/workers/agent-worker.js.map +1 -1
- package/package.json +2 -2
- package/dist/agent-smith-QYDXPFPJ.js +0 -14
- package/dist/agent-smith-runner-GXGDJTSR.js +0 -573
- package/dist/agent-smith-runner-GXGDJTSR.js.map +0 -1
- package/dist/cache-manager-7SKX3IGO.js +0 -10
- package/dist/chunk-74NPKTZV.js +0 -141
- package/dist/chunk-74NPKTZV.js.map +0 -1
- package/dist/chunk-BG2BHWCC.js +0 -10879
- package/dist/chunk-BG2BHWCC.js.map +0 -1
- package/dist/chunk-CUXXRM3T.js +0 -2124
- package/dist/chunk-CUXXRM3T.js.map +0 -1
- package/dist/chunk-D25EIBPO.js +0 -183
- package/dist/chunk-D25EIBPO.js.map +0 -1
- package/dist/chunk-F55XBLIA.js +0 -536
- package/dist/chunk-F55XBLIA.js.map +0 -1
- package/dist/chunk-HFQ5ORON.js +0 -279
- package/dist/chunk-HFQ5ORON.js.map +0 -1
- package/dist/chunk-IOUOVBJZ.js +0 -175
- package/dist/chunk-IOUOVBJZ.js.map +0 -1
- package/dist/chunk-KWDNYWOR.js +0 -2270
- package/dist/chunk-KWDNYWOR.js.map +0 -1
- package/dist/chunk-LT7MKIXU.js +0 -266
- package/dist/chunk-LT7MKIXU.js.map +0 -1
- package/dist/chunk-MURGTWG4.js +0 -279
- package/dist/chunk-MURGTWG4.js.map +0 -1
- package/dist/chunk-NMGINYYX.js.map +0 -1
- package/dist/chunk-R6AUYN3R.js.map +0 -1
- package/dist/chunk-SJFJ6GLR.js +0 -955
- package/dist/chunk-SJFJ6GLR.js.map +0 -1
- package/dist/chunk-YTJXD664.js.map +0 -1
- package/dist/git-PZV3BBYI.js +0 -29
- package/dist/guardian-agent-ZHJXLBOU.js +0 -21
- package/dist/progress-PH6NNWZM.js.map +0 -1
- package/dist/vibe-code-signatures-K4UIWKJZ.js.map +0 -1
- package/dist/vulnerability-signatures-ZKVLMBRG.js.map +0 -1
- /package/dist/{chunk-5Z7O66DE.js.map → chunk-F4NJ4CBP.js.map} +0 -0
- /package/dist/{chunk-LVVG2DMW.js.map → chunk-IXO4G4D3.js.map} +0 -0
- /package/dist/{chunk-LP4MVJDW.js.map → chunk-JDHR5BDR.js.map} +0 -0
- /package/dist/{chunk-T5UOH56R.js.map → chunk-R3I2GCZC.js.map} +0 -0
- /package/dist/{chunk-RDOJCRKJ.js.map → chunk-R4AAPFXC.js.map} +0 -0
- /package/dist/{agent-smith-QYDXPFPJ.js.map → goal-manager-LAOT4QQX.js.map} +0 -0
- /package/dist/{cache-manager-7SKX3IGO.js.map → guardian-agent-M352CBE5.js.map} +0 -0
- /package/dist/{git-PZV3BBYI.js.map → issue-store-W2X33X2X.js.map} +0 -0
- /package/dist/{goal-manager-ESJCJXFS.js.map → progress-PQVEM7BR.js.map} +0 -0
- /package/dist/{guardian-agent-ZHJXLBOU.js.map → vibe-code-signatures-ELEWJFGZ.js.map} +0 -0
- /package/dist/{issue-store-JZ2LCQEG.js.map → vulnerability-signatures-EIJQX2TS.js.map} +0 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// src/utils/progress.ts
|
|
2
|
+
var _interactiveMode = false;
|
|
3
|
+
function setInteractiveMode(enabled) {
|
|
4
|
+
_interactiveMode = enabled;
|
|
5
|
+
}
|
|
6
|
+
function isInteractiveMode() {
|
|
7
|
+
return _interactiveMode;
|
|
8
|
+
}
|
|
9
|
+
var ProgressReporter = class {
|
|
10
|
+
currentPhase = "init";
|
|
11
|
+
startTime = Date.now();
|
|
12
|
+
phaseStartTime = Date.now();
|
|
13
|
+
verbose;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.verbose = options.verbose ?? true;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Report a status update
|
|
19
|
+
*/
|
|
20
|
+
report(message, detail) {
|
|
21
|
+
if (!this.verbose || _interactiveMode) return;
|
|
22
|
+
const prefix = this.getPhaseIcon(this.currentPhase);
|
|
23
|
+
const fullMessage = detail ? `${message}: ${detail}` : message;
|
|
24
|
+
console.error(`${prefix} ${fullMessage}`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Start a new phase
|
|
28
|
+
*/
|
|
29
|
+
startPhase(phase, message) {
|
|
30
|
+
this.currentPhase = phase;
|
|
31
|
+
this.phaseStartTime = Date.now();
|
|
32
|
+
this.report(message);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Update within current phase
|
|
36
|
+
*/
|
|
37
|
+
update(message, detail) {
|
|
38
|
+
this.report(message, detail);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Report progress on a file
|
|
42
|
+
*/
|
|
43
|
+
file(action, filePath) {
|
|
44
|
+
const fileName = filePath.split("/").pop() || filePath;
|
|
45
|
+
this.report(action, fileName);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Report an AI analysis step
|
|
49
|
+
*/
|
|
50
|
+
ai(action, context) {
|
|
51
|
+
if (_interactiveMode) return;
|
|
52
|
+
const prefix = "[AI]";
|
|
53
|
+
const message = context ? `${action}: ${context}` : action;
|
|
54
|
+
console.error(`${prefix} ${message}`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Report a finding
|
|
58
|
+
*/
|
|
59
|
+
finding(severity, message) {
|
|
60
|
+
if (_interactiveMode) return;
|
|
61
|
+
const labels = {
|
|
62
|
+
critical: "[CRITICAL]",
|
|
63
|
+
serious: "[SERIOUS]",
|
|
64
|
+
moderate: "[MODERATE]",
|
|
65
|
+
low: "[LOW]"
|
|
66
|
+
};
|
|
67
|
+
console.error(` ${labels[severity]} ${message}`);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Complete current phase
|
|
71
|
+
*/
|
|
72
|
+
completePhase(summary) {
|
|
73
|
+
const elapsed = Date.now() - this.phaseStartTime;
|
|
74
|
+
this.report(`Done: ${summary}`, `(${elapsed}ms)`);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Complete the entire operation
|
|
78
|
+
*/
|
|
79
|
+
complete(summary) {
|
|
80
|
+
if (_interactiveMode) return;
|
|
81
|
+
const totalElapsed = Date.now() - this.startTime;
|
|
82
|
+
console.error("");
|
|
83
|
+
console.error(`----------------------------------------`);
|
|
84
|
+
console.error(`[COMPLETE] ${summary}`);
|
|
85
|
+
console.error(` Total time: ${(totalElapsed / 1e3).toFixed(2)}s`);
|
|
86
|
+
console.error(`----------------------------------------`);
|
|
87
|
+
console.error("");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Report an error
|
|
91
|
+
*/
|
|
92
|
+
error(message, detail) {
|
|
93
|
+
if (_interactiveMode) return;
|
|
94
|
+
const fullMessage = detail ? `${message}: ${detail}` : message;
|
|
95
|
+
console.error(`[ERROR] ${fullMessage}`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Report a warning
|
|
99
|
+
*/
|
|
100
|
+
warn(message, detail) {
|
|
101
|
+
if (_interactiveMode) return;
|
|
102
|
+
const fullMessage = detail ? `${message}: ${detail}` : message;
|
|
103
|
+
console.error(`[WARN] ${fullMessage}`);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get icon for current phase
|
|
107
|
+
*/
|
|
108
|
+
getPhaseIcon(phase) {
|
|
109
|
+
const icons = {
|
|
110
|
+
"init": ">>",
|
|
111
|
+
"discovery": ">>",
|
|
112
|
+
"reading": ">>",
|
|
113
|
+
"analyzing": ">>",
|
|
114
|
+
"ai-review": "[AI]",
|
|
115
|
+
"prioritizing": ">>",
|
|
116
|
+
"complete": "[OK]"
|
|
117
|
+
};
|
|
118
|
+
return icons[phase] || ">>";
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a sub-reporter for a specific agent
|
|
122
|
+
*/
|
|
123
|
+
forAgent(agentName) {
|
|
124
|
+
return new AgentProgressReporter(agentName, this.verbose);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
var AgentProgressReporter = class {
|
|
128
|
+
agentName;
|
|
129
|
+
verbose;
|
|
130
|
+
issueCount = 0;
|
|
131
|
+
issuesBySeverity = /* @__PURE__ */ new Map();
|
|
132
|
+
batchedIssues = /* @__PURE__ */ new Map();
|
|
133
|
+
criticalIssues = [];
|
|
134
|
+
seriousIssues = [];
|
|
135
|
+
flushTimer = null;
|
|
136
|
+
BATCH_DELAY_MS = 100;
|
|
137
|
+
// Batch issues for 100ms before flushing
|
|
138
|
+
constructor(agentName, verbose = true) {
|
|
139
|
+
this.agentName = agentName;
|
|
140
|
+
this.verbose = verbose;
|
|
141
|
+
}
|
|
142
|
+
start() {
|
|
143
|
+
if (!this.verbose || _interactiveMode) return;
|
|
144
|
+
console.error(`
|
|
145
|
+
[SCOUT] ${this.agentName.toUpperCase()} starting...`);
|
|
146
|
+
}
|
|
147
|
+
analyzing(_file) {
|
|
148
|
+
if (!this.verbose || _interactiveMode) return;
|
|
149
|
+
}
|
|
150
|
+
aiReview(context) {
|
|
151
|
+
if (!this.verbose || _interactiveMode) return;
|
|
152
|
+
if (this.issueCount < 5) {
|
|
153
|
+
console.error(` [AI] reviewing: ${context}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
found(severity, issue, file, line) {
|
|
157
|
+
this.issueCount++;
|
|
158
|
+
const current = this.issuesBySeverity.get(severity) || 0;
|
|
159
|
+
this.issuesBySeverity.set(severity, current + 1);
|
|
160
|
+
if (severity === "critical") {
|
|
161
|
+
this.criticalIssues.push({
|
|
162
|
+
severity,
|
|
163
|
+
issue,
|
|
164
|
+
...file !== void 0 ? { file } : {},
|
|
165
|
+
...line !== void 0 ? { line } : {}
|
|
166
|
+
});
|
|
167
|
+
if (this.verbose && !_interactiveMode) {
|
|
168
|
+
this.flushCriticalAndSerious();
|
|
169
|
+
}
|
|
170
|
+
} else if (severity === "serious") {
|
|
171
|
+
this.seriousIssues.push({
|
|
172
|
+
severity,
|
|
173
|
+
issue,
|
|
174
|
+
...file !== void 0 ? { file } : {},
|
|
175
|
+
...line !== void 0 ? { line } : {}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (!this.verbose || _interactiveMode) return;
|
|
179
|
+
const normalizedIssue = issue.replace(/at line \d+/gi, "").replace(/in .+$/gi, "").trim();
|
|
180
|
+
const key = `${severity}:${normalizedIssue}`;
|
|
181
|
+
if (!this.batchedIssues.has(key)) {
|
|
182
|
+
this.batchedIssues.set(key, []);
|
|
183
|
+
}
|
|
184
|
+
this.batchedIssues.get(key).push({
|
|
185
|
+
severity,
|
|
186
|
+
issue,
|
|
187
|
+
...file !== void 0 ? { file } : {},
|
|
188
|
+
...line !== void 0 ? { line } : {}
|
|
189
|
+
});
|
|
190
|
+
if (severity === "critical") {
|
|
191
|
+
this.flushBatchedIssues();
|
|
192
|
+
} else {
|
|
193
|
+
if (this.flushTimer) {
|
|
194
|
+
clearTimeout(this.flushTimer);
|
|
195
|
+
}
|
|
196
|
+
this.flushTimer = setTimeout(() => this.flushBatchedIssues(), this.BATCH_DELAY_MS);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
flushCriticalAndSerious() {
|
|
200
|
+
for (const issue of this.criticalIssues) {
|
|
201
|
+
console.error(` [CRITICAL] Found: ${issue.issue}`);
|
|
202
|
+
}
|
|
203
|
+
this.criticalIssues = [];
|
|
204
|
+
}
|
|
205
|
+
flushBatchedIssues() {
|
|
206
|
+
if (!this.verbose || _interactiveMode) return;
|
|
207
|
+
if (this.criticalIssues.length > 0) {
|
|
208
|
+
this.flushCriticalAndSerious();
|
|
209
|
+
}
|
|
210
|
+
if (this.seriousIssues.length > 0) {
|
|
211
|
+
for (const issue of this.seriousIssues.slice(0, 10)) {
|
|
212
|
+
console.error(` [SERIOUS] Found: ${issue.issue}`);
|
|
213
|
+
}
|
|
214
|
+
if (this.seriousIssues.length > 10) {
|
|
215
|
+
console.error(` ... and ${this.seriousIssues.length - 10} more serious issues`);
|
|
216
|
+
}
|
|
217
|
+
this.seriousIssues = [];
|
|
218
|
+
}
|
|
219
|
+
if (this.batchedIssues.size === 0) return;
|
|
220
|
+
const moderateGroups = [];
|
|
221
|
+
const lowGroups = [];
|
|
222
|
+
for (const [key, issues] of this.batchedIssues.entries()) {
|
|
223
|
+
const [severity, pattern = ""] = key.split(":", 2);
|
|
224
|
+
const count = issues.length;
|
|
225
|
+
const examples = issues.slice(0, 2).map((i) => i.issue);
|
|
226
|
+
if (severity === "moderate") {
|
|
227
|
+
moderateGroups.push({ pattern, count, examples });
|
|
228
|
+
} else if (severity === "low") {
|
|
229
|
+
lowGroups.push({ pattern, count, examples });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (moderateGroups.length > 0) {
|
|
233
|
+
for (const group of moderateGroups.slice(0, 5)) {
|
|
234
|
+
if (group.count === 1) {
|
|
235
|
+
console.error(` [MODERATE] Found: ${group.examples[0]}`);
|
|
236
|
+
} else {
|
|
237
|
+
console.error(` [MODERATE] Found: ${group.pattern} (${group.count} instances)`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (moderateGroups.length > 5) {
|
|
241
|
+
const remaining = moderateGroups.slice(5).reduce((sum, g) => sum + g.count, 0);
|
|
242
|
+
console.error(` ... and ${remaining} more moderate issues`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (lowGroups.length > 0 && this.issueCount < 200) {
|
|
246
|
+
for (const group of lowGroups.slice(0, 3)) {
|
|
247
|
+
if (group.count === 1) {
|
|
248
|
+
console.error(` [LOW] Found: ${group.examples[0]}`);
|
|
249
|
+
} else {
|
|
250
|
+
console.error(` [LOW] Found: ${group.pattern} (${group.count} instances)`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (lowGroups.length > 3) {
|
|
254
|
+
const remaining = lowGroups.slice(3).reduce((sum, g) => sum + g.count, 0);
|
|
255
|
+
console.error(` ... and ${remaining} more low-severity issues`);
|
|
256
|
+
}
|
|
257
|
+
} else if (lowGroups.length > 0) {
|
|
258
|
+
const totalLow = lowGroups.reduce((sum, g) => sum + g.count, 0);
|
|
259
|
+
console.error(` [LOW] Found ${totalLow} low-severity issues (suppressed for brevity)`);
|
|
260
|
+
}
|
|
261
|
+
this.batchedIssues.clear();
|
|
262
|
+
}
|
|
263
|
+
complete(summary) {
|
|
264
|
+
if (this.flushTimer) {
|
|
265
|
+
clearTimeout(this.flushTimer);
|
|
266
|
+
this.flushTimer = null;
|
|
267
|
+
}
|
|
268
|
+
this.flushBatchedIssues();
|
|
269
|
+
if (!this.verbose || _interactiveMode) return;
|
|
270
|
+
const severityCounts = [];
|
|
271
|
+
if (this.issuesBySeverity.get("critical")) {
|
|
272
|
+
severityCounts.push(`${this.issuesBySeverity.get("critical")} critical`);
|
|
273
|
+
}
|
|
274
|
+
if (this.issuesBySeverity.get("serious")) {
|
|
275
|
+
severityCounts.push(`${this.issuesBySeverity.get("serious")} serious`);
|
|
276
|
+
}
|
|
277
|
+
if (this.issuesBySeverity.get("moderate")) {
|
|
278
|
+
severityCounts.push(`${this.issuesBySeverity.get("moderate")} moderate`);
|
|
279
|
+
}
|
|
280
|
+
if (this.issuesBySeverity.get("low")) {
|
|
281
|
+
severityCounts.push(`${this.issuesBySeverity.get("low")} low`);
|
|
282
|
+
}
|
|
283
|
+
const severitySummary = severityCounts.length > 0 ? ` (${severityCounts.join(", ")})` : "";
|
|
284
|
+
const msg = summary || `${this.issueCount} issues found${severitySummary}`;
|
|
285
|
+
console.error(` Done: ${this.agentName}: ${msg}`);
|
|
286
|
+
}
|
|
287
|
+
getIssueCount() {
|
|
288
|
+
return this.issueCount;
|
|
289
|
+
}
|
|
290
|
+
getIssuesBySeverity() {
|
|
291
|
+
return new Map(this.issuesBySeverity);
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
var globalReporter = null;
|
|
295
|
+
function getProgressReporter(options) {
|
|
296
|
+
if (!globalReporter) {
|
|
297
|
+
globalReporter = new ProgressReporter(options);
|
|
298
|
+
}
|
|
299
|
+
return globalReporter;
|
|
300
|
+
}
|
|
301
|
+
function resetProgressReporter() {
|
|
302
|
+
globalReporter = null;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export {
|
|
306
|
+
setInteractiveMode,
|
|
307
|
+
isInteractiveMode,
|
|
308
|
+
ProgressReporter,
|
|
309
|
+
AgentProgressReporter,
|
|
310
|
+
getProgressReporter,
|
|
311
|
+
resetProgressReporter
|
|
312
|
+
};
|
|
313
|
+
//# sourceMappingURL=chunk-APMV77PU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/progress.ts"],"sourcesContent":["/**\n * Progress Reporter for Trie Agent\n * \n * Provides real-time feedback to users as the agent works.\n * Uses console.error because MCP clients display stderr to users.\n */\n\n/**\n * Global interactive mode flag\n * When enabled, suppresses all console output (handled by InteractiveDashboard instead)\n */\nlet _interactiveMode = false;\n\n/**\n * Enable or disable interactive mode\n * When enabled, all console output from ProgressReporter and AgentProgressReporter is suppressed\n */\nexport function setInteractiveMode(enabled: boolean): void {\n _interactiveMode = enabled;\n}\n\n/**\n * Check if interactive mode is enabled\n */\nexport function isInteractiveMode(): boolean {\n return _interactiveMode;\n}\n\nexport type ProgressPhase = \n | 'init'\n | 'discovery'\n | 'reading'\n | 'analyzing'\n | 'ai-review'\n | 'prioritizing'\n | 'complete';\n\nexport interface ProgressCallback {\n (phase: ProgressPhase, message: string, detail?: string): void;\n}\n\n/**\n * Progress Reporter - streams status updates to the user\n */\nexport class ProgressReporter {\n private currentPhase: ProgressPhase = 'init';\n private startTime: number = Date.now();\n private phaseStartTime: number = Date.now();\n private verbose: boolean;\n\n constructor(options: { verbose?: boolean } = {}) {\n this.verbose = options.verbose ?? true;\n }\n\n /**\n * Report a status update\n */\n report(message: string, detail?: string): void {\n if (!this.verbose || _interactiveMode) return;\n \n const prefix = this.getPhaseIcon(this.currentPhase);\n const fullMessage = detail ? `${message}: ${detail}` : message;\n console.error(`${prefix} ${fullMessage}`);\n }\n\n /**\n * Start a new phase\n */\n startPhase(phase: ProgressPhase, message: string): void {\n this.currentPhase = phase;\n this.phaseStartTime = Date.now();\n this.report(message);\n }\n\n /**\n * Update within current phase\n */\n update(message: string, detail?: string): void {\n this.report(message, detail);\n }\n\n /**\n * Report progress on a file\n */\n file(action: string, filePath: string): void {\n // Show just the filename for cleaner output\n const fileName = filePath.split('/').pop() || filePath;\n this.report(action, fileName);\n }\n\n /**\n * Report an AI analysis step\n */\n ai(action: string, context?: string): void {\n if (_interactiveMode) return;\n const prefix = '[AI]';\n const message = context ? `${action}: ${context}` : action;\n console.error(`${prefix} ${message}`);\n }\n\n /**\n * Report a finding\n */\n finding(severity: 'critical' | 'serious' | 'moderate' | 'low', message: string): void {\n if (_interactiveMode) return;\n const labels = {\n critical: '[CRITICAL]',\n serious: '[SERIOUS]',\n moderate: '[MODERATE]',\n low: '[LOW]'\n };\n console.error(` ${labels[severity]} ${message}`);\n }\n\n /**\n * Complete current phase\n */\n completePhase(summary: string): void {\n const elapsed = Date.now() - this.phaseStartTime;\n this.report(`Done: ${summary}`, `(${elapsed}ms)`);\n }\n\n /**\n * Complete the entire operation\n */\n complete(summary: string): void {\n if (_interactiveMode) return;\n const totalElapsed = Date.now() - this.startTime;\n console.error('');\n console.error(`----------------------------------------`);\n console.error(`[COMPLETE] ${summary}`);\n console.error(` Total time: ${(totalElapsed / 1000).toFixed(2)}s`);\n console.error(`----------------------------------------`);\n console.error('');\n }\n\n /**\n * Report an error\n */\n error(message: string, detail?: string): void {\n if (_interactiveMode) return;\n const fullMessage = detail ? `${message}: ${detail}` : message;\n console.error(`[ERROR] ${fullMessage}`);\n }\n\n /**\n * Report a warning\n */\n warn(message: string, detail?: string): void {\n if (_interactiveMode) return;\n const fullMessage = detail ? `${message}: ${detail}` : message;\n console.error(`[WARN] ${fullMessage}`);\n }\n\n /**\n * Get icon for current phase\n */\n private getPhaseIcon(phase: ProgressPhase): string {\n const icons: Record<ProgressPhase, string> = {\n 'init': '>>',\n 'discovery': '>>',\n 'reading': '>>',\n 'analyzing': '>>',\n 'ai-review': '[AI]',\n 'prioritizing': '>>',\n 'complete': '[OK]'\n };\n return icons[phase] || '>>';\n }\n\n /**\n * Create a sub-reporter for a specific agent\n */\n forAgent(agentName: string): AgentProgressReporter {\n return new AgentProgressReporter(agentName, this.verbose);\n }\n}\n\n/**\n * Progress reporter scoped to a specific agent\n */\nexport class AgentProgressReporter {\n private agentName: string;\n private verbose: boolean;\n private issueCount: number = 0;\n private issuesBySeverity: Map<string, number> = new Map();\n private batchedIssues: Map<string, Array<{ severity: string; issue: string; file?: string; line?: number }>> = new Map();\n private criticalIssues: Array<{ severity: string; issue: string; file?: string; line?: number }> = [];\n private seriousIssues: Array<{ severity: string; issue: string; file?: string; line?: number }> = [];\n private flushTimer: NodeJS.Timeout | null = null;\n private readonly BATCH_DELAY_MS = 100; // Batch issues for 100ms before flushing\n\n constructor(agentName: string, verbose: boolean = true) {\n this.agentName = agentName;\n this.verbose = verbose;\n }\n\n start(): void {\n if (!this.verbose || _interactiveMode) return;\n console.error(`\\n[SCOUT] ${this.agentName.toUpperCase()} starting...`);\n }\n\n analyzing(_file: string): void {\n if (!this.verbose || _interactiveMode) return;\n // Suppress individual file analysis messages - they're too verbose\n // The progress updates from streaming manager will show file progress\n }\n\n aiReview(context: string): void {\n if (!this.verbose || _interactiveMode) return;\n // Suppress AI review messages - they're too verbose during watch mode\n // Only show if there are very few issues (indicating a focused scan)\n if (this.issueCount < 5) {\n console.error(` [AI] reviewing: ${context}`);\n }\n }\n\n found(severity: string, issue: string, file?: string, line?: number): void {\n this.issueCount++;\n \n // Track by severity\n const current = this.issuesBySeverity.get(severity) || 0;\n this.issuesBySeverity.set(severity, current + 1);\n\n // Store critical and serious issues for detailed output\n if (severity === 'critical') {\n this.criticalIssues.push({\n severity,\n issue,\n ...(file !== undefined ? { file } : {}),\n ...(line !== undefined ? { line } : {}),\n });\n // Flush critical issues immediately\n if (this.verbose && !_interactiveMode) {\n this.flushCriticalAndSerious();\n }\n } else if (severity === 'serious') {\n this.seriousIssues.push({\n severity,\n issue,\n ...(file !== undefined ? { file } : {}),\n ...(line !== undefined ? { line } : {}),\n });\n }\n\n // Batch similar issues together for cleaner output\n if (!this.verbose || _interactiveMode) return;\n\n // Normalize issue description for grouping (remove line numbers, file paths)\n const normalizedIssue = issue.replace(/at line \\d+/gi, '').replace(/in .+$/gi, '').trim();\n const key = `${severity}:${normalizedIssue}`;\n \n if (!this.batchedIssues.has(key)) {\n this.batchedIssues.set(key, []);\n }\n this.batchedIssues.get(key)!.push({\n severity,\n issue,\n ...(file !== undefined ? { file } : {}),\n ...(line !== undefined ? { line } : {}),\n });\n\n // Schedule flush (debounced) - but flush immediately for critical\n if (severity === 'critical') {\n this.flushBatchedIssues();\n } else {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => this.flushBatchedIssues(), this.BATCH_DELAY_MS);\n }\n }\n\n private flushCriticalAndSerious(): void {\n // Always show critical issues immediately\n for (const issue of this.criticalIssues) {\n console.error(` [CRITICAL] Found: ${issue.issue}`);\n }\n this.criticalIssues = [];\n }\n\n private flushBatchedIssues(): void {\n if (!this.verbose || _interactiveMode) return;\n\n // Always show critical issues immediately (should already be flushed, but double-check)\n if (this.criticalIssues.length > 0) {\n this.flushCriticalAndSerious();\n }\n\n // Show serious issues (limit to first 10 to avoid spam)\n if (this.seriousIssues.length > 0) {\n for (const issue of this.seriousIssues.slice(0, 10)) {\n console.error(` [SERIOUS] Found: ${issue.issue}`);\n }\n if (this.seriousIssues.length > 10) {\n console.error(` ... and ${this.seriousIssues.length - 10} more serious issues`);\n }\n this.seriousIssues = [];\n }\n\n if (this.batchedIssues.size === 0) return;\n\n // For moderate and low issues, group similar ones together\n const moderateGroups: Array<{ pattern: string; count: number; examples: string[] }> = [];\n const lowGroups: Array<{ pattern: string; count: number; examples: string[] }> = [];\n\n for (const [key, issues] of this.batchedIssues.entries()) {\n const [severity, pattern = ''] = key.split(':', 2);\n const count = issues.length;\n const examples = issues.slice(0, 2).map(i => i.issue);\n\n if (severity === 'moderate') {\n moderateGroups.push({ pattern, count, examples });\n } else if (severity === 'low') {\n lowGroups.push({ pattern, count, examples });\n }\n }\n\n // Show moderate issues (grouped, max 5 groups)\n if (moderateGroups.length > 0) {\n for (const group of moderateGroups.slice(0, 5)) {\n if (group.count === 1) {\n console.error(` [MODERATE] Found: ${group.examples[0]}`);\n } else {\n console.error(` [MODERATE] Found: ${group.pattern} (${group.count} instances)`);\n }\n }\n if (moderateGroups.length > 5) {\n const remaining = moderateGroups.slice(5).reduce((sum, g) => sum + g.count, 0);\n console.error(` ... and ${remaining} more moderate issues`);\n }\n }\n\n // Show low issues (grouped, max 3 groups, only if not too many)\n // Suppress low issues if there are too many total issues\n if (lowGroups.length > 0 && this.issueCount < 200) {\n for (const group of lowGroups.slice(0, 3)) {\n if (group.count === 1) {\n console.error(` [LOW] Found: ${group.examples[0]}`);\n } else {\n console.error(` [LOW] Found: ${group.pattern} (${group.count} instances)`);\n }\n }\n if (lowGroups.length > 3) {\n const remaining = lowGroups.slice(3).reduce((sum, g) => sum + g.count, 0);\n console.error(` ... and ${remaining} more low-severity issues`);\n }\n } else if (lowGroups.length > 0) {\n // Too many issues - just show summary\n const totalLow = lowGroups.reduce((sum, g) => sum + g.count, 0);\n console.error(` [LOW] Found ${totalLow} low-severity issues (suppressed for brevity)`);\n }\n\n this.batchedIssues.clear();\n }\n\n complete(summary?: string): void {\n // Flush any remaining batched issues\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n this.flushBatchedIssues();\n\n if (!this.verbose || _interactiveMode) return;\n\n // Build a better summary\n const severityCounts: string[] = [];\n if (this.issuesBySeverity.get('critical')) {\n severityCounts.push(`${this.issuesBySeverity.get('critical')} critical`);\n }\n if (this.issuesBySeverity.get('serious')) {\n severityCounts.push(`${this.issuesBySeverity.get('serious')} serious`);\n }\n if (this.issuesBySeverity.get('moderate')) {\n severityCounts.push(`${this.issuesBySeverity.get('moderate')} moderate`);\n }\n if (this.issuesBySeverity.get('low')) {\n severityCounts.push(`${this.issuesBySeverity.get('low')} low`);\n }\n\n const severitySummary = severityCounts.length > 0 \n ? ` (${severityCounts.join(', ')})`\n : '';\n \n const msg = summary || `${this.issueCount} issues found${severitySummary}`;\n console.error(` Done: ${this.agentName}: ${msg}`);\n }\n\n getIssueCount(): number {\n return this.issueCount;\n }\n\n getIssuesBySeverity(): Map<string, number> {\n return new Map(this.issuesBySeverity);\n }\n}\n\n/**\n * Global singleton for easy access\n */\nlet globalReporter: ProgressReporter | null = null;\n\nexport function getProgressReporter(options?: { verbose?: boolean }): ProgressReporter {\n if (!globalReporter) {\n globalReporter = new ProgressReporter(options);\n }\n return globalReporter;\n}\n\nexport function resetProgressReporter(): void {\n globalReporter = null;\n}\n"],"mappings":";AAWA,IAAI,mBAAmB;AAMhB,SAAS,mBAAmB,SAAwB;AACzD,qBAAmB;AACrB;AAKO,SAAS,oBAA6B;AAC3C,SAAO;AACT;AAkBO,IAAM,mBAAN,MAAuB;AAAA,EACpB,eAA8B;AAAA,EAC9B,YAAoB,KAAK,IAAI;AAAA,EAC7B,iBAAyB,KAAK,IAAI;AAAA,EAClC;AAAA,EAER,YAAY,UAAiC,CAAC,GAAG;AAC/C,SAAK,UAAU,QAAQ,WAAW;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAiB,QAAuB;AAC7C,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAEvC,UAAM,SAAS,KAAK,aAAa,KAAK,YAAY;AAClD,UAAM,cAAc,SAAS,GAAG,OAAO,KAAK,MAAM,KAAK;AACvD,YAAQ,MAAM,GAAG,MAAM,IAAI,WAAW,EAAE;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAsB,SAAuB;AACtD,SAAK,eAAe;AACpB,SAAK,iBAAiB,KAAK,IAAI;AAC/B,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAiB,QAAuB;AAC7C,SAAK,OAAO,SAAS,MAAM;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,QAAgB,UAAwB;AAE3C,UAAM,WAAW,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAC9C,SAAK,OAAO,QAAQ,QAAQ;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,GAAG,QAAgB,SAAwB;AACzC,QAAI,iBAAkB;AACtB,UAAM,SAAS;AACf,UAAM,UAAU,UAAU,GAAG,MAAM,KAAK,OAAO,KAAK;AACpD,YAAQ,MAAM,GAAG,MAAM,IAAI,OAAO,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,UAAuD,SAAuB;AACpF,QAAI,iBAAkB;AACtB,UAAM,SAAS;AAAA,MACb,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AACA,YAAQ,MAAM,MAAM,OAAO,QAAQ,CAAC,IAAI,OAAO,EAAE;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAAuB;AACnC,UAAM,UAAU,KAAK,IAAI,IAAI,KAAK;AAClC,SAAK,OAAO,SAAS,OAAO,IAAI,IAAI,OAAO,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAuB;AAC9B,QAAI,iBAAkB;AACtB,UAAM,eAAe,KAAK,IAAI,IAAI,KAAK;AACvC,YAAQ,MAAM,EAAE;AAChB,YAAQ,MAAM,0CAA0C;AACxD,YAAQ,MAAM,cAAc,OAAO,EAAE;AACrC,YAAQ,MAAM,mBAAmB,eAAe,KAAM,QAAQ,CAAC,CAAC,GAAG;AACnE,YAAQ,MAAM,0CAA0C;AACxD,YAAQ,MAAM,EAAE;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAiB,QAAuB;AAC5C,QAAI,iBAAkB;AACtB,UAAM,cAAc,SAAS,GAAG,OAAO,KAAK,MAAM,KAAK;AACvD,YAAQ,MAAM,WAAW,WAAW,EAAE;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAiB,QAAuB;AAC3C,QAAI,iBAAkB;AACtB,UAAM,cAAc,SAAS,GAAG,OAAO,KAAK,MAAM,KAAK;AACvD,YAAQ,MAAM,UAAU,WAAW,EAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,OAA8B;AACjD,UAAM,QAAuC;AAAA,MAC3C,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,YAAY;AAAA,IACd;AACA,WAAO,MAAM,KAAK,KAAK;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,WAA0C;AACjD,WAAO,IAAI,sBAAsB,WAAW,KAAK,OAAO;AAAA,EAC1D;AACF;AAKO,IAAM,wBAAN,MAA4B;AAAA,EACzB;AAAA,EACA;AAAA,EACA,aAAqB;AAAA,EACrB,mBAAwC,oBAAI,IAAI;AAAA,EAChD,gBAAuG,oBAAI,IAAI;AAAA,EAC/G,iBAA2F,CAAC;AAAA,EAC5F,gBAA0F,CAAC;AAAA,EAC3F,aAAoC;AAAA,EAC3B,iBAAiB;AAAA;AAAA,EAElC,YAAY,WAAmB,UAAmB,MAAM;AACtD,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAc;AACZ,QAAI,CAAC,KAAK,WAAW,iBAAkB;AACvC,YAAQ,MAAM;AAAA,UAAa,KAAK,UAAU,YAAY,CAAC,cAAc;AAAA,EACvE;AAAA,EAEA,UAAU,OAAqB;AAC7B,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAAA,EAGzC;AAAA,EAEA,SAAS,SAAuB;AAC9B,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAGvC,QAAI,KAAK,aAAa,GAAG;AACvB,cAAQ,MAAM,sBAAsB,OAAO,EAAE;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,UAAkB,OAAe,MAAe,MAAqB;AACzE,SAAK;AAGL,UAAM,UAAU,KAAK,iBAAiB,IAAI,QAAQ,KAAK;AACvD,SAAK,iBAAiB,IAAI,UAAU,UAAU,CAAC;AAG/C,QAAI,aAAa,YAAY;AAC3B,WAAK,eAAe,KAAK;AAAA,QACvB;AAAA,QACA;AAAA,QACA,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,MACvC,CAAC;AAED,UAAI,KAAK,WAAW,CAAC,kBAAkB;AACrC,aAAK,wBAAwB;AAAA,MAC/B;AAAA,IACF,WAAW,aAAa,WAAW;AACjC,WAAK,cAAc,KAAK;AAAA,QACtB;AAAA,QACA;AAAA,QACA,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,MACvC,CAAC;AAAA,IACH;AAGA,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAGvC,UAAM,kBAAkB,MAAM,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,YAAY,EAAE,EAAE,KAAK;AACxF,UAAM,MAAM,GAAG,QAAQ,IAAI,eAAe;AAE1C,QAAI,CAAC,KAAK,cAAc,IAAI,GAAG,GAAG;AAChC,WAAK,cAAc,IAAI,KAAK,CAAC,CAAC;AAAA,IAChC;AACA,SAAK,cAAc,IAAI,GAAG,EAAG,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,MACrC,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,IACvC,CAAC;AAGD,QAAI,aAAa,YAAY;AAC3B,WAAK,mBAAmB;AAAA,IAC1B,OAAO;AACL,UAAI,KAAK,YAAY;AACnB,qBAAa,KAAK,UAAU;AAAA,MAC9B;AACA,WAAK,aAAa,WAAW,MAAM,KAAK,mBAAmB,GAAG,KAAK,cAAc;AAAA,IACnF;AAAA,EACF;AAAA,EAEQ,0BAAgC;AAEtC,eAAW,SAAS,KAAK,gBAAgB;AACvC,cAAQ,MAAM,wBAAwB,MAAM,KAAK,EAAE;AAAA,IACrD;AACA,SAAK,iBAAiB,CAAC;AAAA,EACzB;AAAA,EAEQ,qBAA2B;AACjC,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAGvC,QAAI,KAAK,eAAe,SAAS,GAAG;AAClC,WAAK,wBAAwB;AAAA,IAC/B;AAGA,QAAI,KAAK,cAAc,SAAS,GAAG;AACjC,iBAAW,SAAS,KAAK,cAAc,MAAM,GAAG,EAAE,GAAG;AACnD,gBAAQ,MAAM,uBAAuB,MAAM,KAAK,EAAE;AAAA,MACpD;AACA,UAAI,KAAK,cAAc,SAAS,IAAI;AAClC,gBAAQ,MAAM,cAAc,KAAK,cAAc,SAAS,EAAE,sBAAsB;AAAA,MAClF;AACA,WAAK,gBAAgB,CAAC;AAAA,IACxB;AAEA,QAAI,KAAK,cAAc,SAAS,EAAG;AAGnC,UAAM,iBAAgF,CAAC;AACvF,UAAM,YAA2E,CAAC;AAElF,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,cAAc,QAAQ,GAAG;AACxD,YAAM,CAAC,UAAU,UAAU,EAAE,IAAI,IAAI,MAAM,KAAK,CAAC;AACjD,YAAM,QAAQ,OAAO;AACrB,YAAM,WAAW,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,KAAK;AAEpD,UAAI,aAAa,YAAY;AAC3B,uBAAe,KAAK,EAAE,SAAS,OAAO,SAAS,CAAC;AAAA,MAClD,WAAW,aAAa,OAAO;AAC7B,kBAAU,KAAK,EAAE,SAAS,OAAO,SAAS,CAAC;AAAA,MAC7C;AAAA,IACF;AAGA,QAAI,eAAe,SAAS,GAAG;AAC7B,iBAAW,SAAS,eAAe,MAAM,GAAG,CAAC,GAAG;AAC9C,YAAI,MAAM,UAAU,GAAG;AACrB,kBAAQ,MAAM,wBAAwB,MAAM,SAAS,CAAC,CAAC,EAAE;AAAA,QAC3D,OAAO;AACL,kBAAQ,MAAM,wBAAwB,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa;AAAA,QAClF;AAAA,MACF;AACA,UAAI,eAAe,SAAS,GAAG;AAC7B,cAAM,YAAY,eAAe,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AAC7E,gBAAQ,MAAM,cAAc,SAAS,uBAAuB;AAAA,MAC9D;AAAA,IACF;AAIA,QAAI,UAAU,SAAS,KAAK,KAAK,aAAa,KAAK;AACjD,iBAAW,SAAS,UAAU,MAAM,GAAG,CAAC,GAAG;AACzC,YAAI,MAAM,UAAU,GAAG;AACrB,kBAAQ,MAAM,mBAAmB,MAAM,SAAS,CAAC,CAAC,EAAE;AAAA,QACtD,OAAO;AACL,kBAAQ,MAAM,mBAAmB,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa;AAAA,QAC7E;AAAA,MACF;AACA,UAAI,UAAU,SAAS,GAAG;AACxB,cAAM,YAAY,UAAU,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AACxE,gBAAQ,MAAM,cAAc,SAAS,2BAA2B;AAAA,MAClE;AAAA,IACF,WAAW,UAAU,SAAS,GAAG;AAE/B,YAAM,WAAW,UAAU,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AAC9D,cAAQ,MAAM,kBAAkB,QAAQ,+CAA+C;AAAA,IACzF;AAEA,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA,EAEA,SAAS,SAAwB;AAE/B,QAAI,KAAK,YAAY;AACnB,mBAAa,KAAK,UAAU;AAC5B,WAAK,aAAa;AAAA,IACpB;AACA,SAAK,mBAAmB;AAExB,QAAI,CAAC,KAAK,WAAW,iBAAkB;AAGvC,UAAM,iBAA2B,CAAC;AAClC,QAAI,KAAK,iBAAiB,IAAI,UAAU,GAAG;AACzC,qBAAe,KAAK,GAAG,KAAK,iBAAiB,IAAI,UAAU,CAAC,WAAW;AAAA,IACzE;AACA,QAAI,KAAK,iBAAiB,IAAI,SAAS,GAAG;AACxC,qBAAe,KAAK,GAAG,KAAK,iBAAiB,IAAI,SAAS,CAAC,UAAU;AAAA,IACvE;AACA,QAAI,KAAK,iBAAiB,IAAI,UAAU,GAAG;AACzC,qBAAe,KAAK,GAAG,KAAK,iBAAiB,IAAI,UAAU,CAAC,WAAW;AAAA,IACzE;AACA,QAAI,KAAK,iBAAiB,IAAI,KAAK,GAAG;AACpC,qBAAe,KAAK,GAAG,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM;AAAA,IAC/D;AAEA,UAAM,kBAAkB,eAAe,SAAS,IAC5C,KAAK,eAAe,KAAK,IAAI,CAAC,MAC9B;AAEJ,UAAM,MAAM,WAAW,GAAG,KAAK,UAAU,gBAAgB,eAAe;AACxE,YAAQ,MAAM,YAAY,KAAK,SAAS,KAAK,GAAG,EAAE;AAAA,EACpD;AAAA,EAEA,gBAAwB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,sBAA2C;AACzC,WAAO,IAAI,IAAI,KAAK,gBAAgB;AAAA,EACtC;AACF;AAKA,IAAI,iBAA0C;AAEvC,SAAS,oBAAoB,SAAmD;AACrF,MAAI,CAAC,gBAAgB;AACnB,qBAAiB,IAAI,iBAAiB,OAAO;AAAA,EAC/C;AACA,SAAO;AACT;AAEO,SAAS,wBAA8B;AAC5C,mBAAiB;AACnB;","names":[]}
|
|
@@ -1,29 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ContextGraph,
|
|
3
|
+
GotchaPredictor,
|
|
4
|
+
findCrossProjectPatterns,
|
|
5
|
+
isAIAvailable,
|
|
6
|
+
recordToGlobalMemory,
|
|
7
|
+
runAIAnalysis
|
|
8
|
+
} from "./chunk-NIASHOAB.js";
|
|
1
9
|
import {
|
|
2
10
|
getGoalManager,
|
|
3
11
|
getInsightStore
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import {
|
|
6
|
-
ContextGraph,
|
|
7
|
-
GotchaPredictor
|
|
8
|
-
} from "./chunk-F55XBLIA.js";
|
|
12
|
+
} from "./chunk-OVRG5RP3.js";
|
|
9
13
|
import {
|
|
10
14
|
getGuardianState
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
findCrossProjectPatterns,
|
|
14
|
-
recordToGlobalMemory
|
|
15
|
-
} from "./chunk-LT7MKIXU.js";
|
|
15
|
+
} from "./chunk-R3I2GCZC.js";
|
|
16
16
|
import {
|
|
17
17
|
autoResolveIssues,
|
|
18
18
|
getHistoricalInsights,
|
|
19
19
|
getIssueHash,
|
|
20
20
|
searchIssues,
|
|
21
21
|
storeIssues
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import {
|
|
24
|
-
isAIAvailable,
|
|
25
|
-
runAIAnalysis
|
|
26
|
-
} from "./chunk-74NPKTZV.js";
|
|
22
|
+
} from "./chunk-JDHR5BDR.js";
|
|
27
23
|
|
|
28
24
|
// src/guardian/guardian-agent.ts
|
|
29
25
|
import { basename as basename2 } from "path";
|
|
@@ -2362,7 +2358,7 @@ var GuardianAgent = class {
|
|
|
2362
2358
|
await this.guardianState.recordScan();
|
|
2363
2359
|
try {
|
|
2364
2360
|
const riskLevel = issues.filter((i) => i.severity === "critical").length > 0 ? "critical" : issues.filter((i) => i.severity === "serious").length >= 3 ? "high" : issues.length > 10 ? "medium" : "low";
|
|
2365
|
-
const { calculateAdaptiveScanFrequency } = await import("./goal-manager-
|
|
2361
|
+
const { calculateAdaptiveScanFrequency } = await import("./goal-manager-LAOT4QQX.js");
|
|
2366
2362
|
const result = await calculateAdaptiveScanFrequency(riskLevel);
|
|
2367
2363
|
await this.guardianState.setScanFrequency(result.frequencyMs);
|
|
2368
2364
|
} catch {
|
|
@@ -2592,8 +2588,7 @@ function getGuardian(projectPath) {
|
|
|
2592
2588
|
}
|
|
2593
2589
|
|
|
2594
2590
|
export {
|
|
2595
|
-
SlackIntegration,
|
|
2596
2591
|
GuardianAgent,
|
|
2597
2592
|
getGuardian
|
|
2598
2593
|
};
|
|
2599
|
-
//# sourceMappingURL=chunk-
|
|
2594
|
+
//# sourceMappingURL=chunk-B3MNN3XB.js.map
|