coolhand-cli 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -2
- package/dist/api/feedback-client.d.ts +17 -0
- package/dist/api/feedback-client.d.ts.map +1 -0
- package/dist/api/feedback-client.js +40 -0
- package/dist/api/feedback-client.js.map +1 -0
- package/dist/api/last-sync.d.ts +8 -6
- package/dist/api/last-sync.d.ts.map +1 -1
- package/dist/api/last-sync.js +27 -16
- package/dist/api/last-sync.js.map +1 -1
- package/dist/api/log-client.d.ts +17 -0
- package/dist/api/log-client.d.ts.map +1 -0
- package/dist/api/log-client.js +40 -0
- package/dist/api/log-client.js.map +1 -0
- package/dist/bin.js +0 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +326 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze-claude-sessions.d.ts +6 -0
- package/dist/commands/analyze-claude-sessions.d.ts.map +1 -1
- package/dist/commands/analyze-claude-sessions.js +60 -9
- package/dist/commands/analyze-claude-sessions.js.map +1 -1
- package/dist/commands/clients.d.ts.map +1 -1
- package/dist/commands/clients.js +2 -1
- package/dist/commands/clients.js.map +1 -1
- package/dist/commands/close-optimization.js +1 -1
- package/dist/commands/close-optimization.js.map +1 -1
- package/dist/commands/fetch-log.d.ts +3 -0
- package/dist/commands/fetch-log.d.ts.map +1 -0
- package/dist/commands/{create-optimization.js → fetch-log.js} +14 -10
- package/dist/commands/fetch-log.js.map +1 -0
- package/dist/commands/get-feedback.d.ts +3 -0
- package/dist/commands/get-feedback.d.ts.map +1 -0
- package/dist/commands/get-feedback.js +70 -0
- package/dist/commands/get-feedback.js.map +1 -0
- package/dist/commands/get-optimization.d.ts.map +1 -1
- package/dist/commands/get-optimization.js +61 -10
- package/dist/commands/get-optimization.js.map +1 -1
- package/dist/commands/mcp-call.d.ts.map +1 -1
- package/dist/commands/mcp-call.js +14 -50
- package/dist/commands/mcp-call.js.map +1 -1
- package/dist/commands/search-feedback.d.ts +3 -0
- package/dist/commands/search-feedback.d.ts.map +1 -0
- package/dist/commands/search-feedback.js +71 -0
- package/dist/commands/search-feedback.js.map +1 -0
- package/dist/commands/search-logs.d.ts +3 -0
- package/dist/commands/search-logs.d.ts.map +1 -0
- package/dist/commands/search-logs.js +77 -0
- package/dist/commands/search-logs.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/whoami.js +1 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/parse-when.d.ts +17 -0
- package/dist/parse-when.d.ts.map +1 -0
- package/dist/parse-when.js +49 -0
- package/dist/parse-when.js.map +1 -0
- package/dist/sessions/claude-scanner.d.ts +14 -1
- package/dist/sessions/claude-scanner.d.ts.map +1 -1
- package/dist/sessions/claude-scanner.js +205 -41
- package/dist/sessions/claude-scanner.js.map +1 -1
- package/dist/sessions/cowork-scanner.d.ts +2 -0
- package/dist/sessions/cowork-scanner.d.ts.map +1 -1
- package/dist/sessions/cowork-scanner.js +22 -9
- package/dist/sessions/cowork-scanner.js.map +1 -1
- package/dist/sessions/redact-secrets.d.ts +14 -0
- package/dist/sessions/redact-secrets.d.ts.map +1 -0
- package/dist/sessions/redact-secrets.js +47 -0
- package/dist/sessions/redact-secrets.js.map +1 -0
- package/dist/sessions/session-filter.d.ts +28 -0
- package/dist/sessions/session-filter.d.ts.map +1 -0
- package/dist/sessions/session-filter.js +38 -0
- package/dist/sessions/session-filter.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +6 -6
- package/dist/commands/accounts.d.ts +0 -3
- package/dist/commands/accounts.d.ts.map +0 -1
- package/dist/commands/accounts.js +0 -59
- package/dist/commands/accounts.js.map +0 -1
- package/dist/commands/add-optimization-comment.d.ts +0 -3
- package/dist/commands/add-optimization-comment.d.ts.map +0 -1
- package/dist/commands/add-optimization-comment.js +0 -28
- package/dist/commands/add-optimization-comment.js.map +0 -1
- package/dist/commands/capture-sessions.d.ts +0 -3
- package/dist/commands/capture-sessions.d.ts.map +0 -1
- package/dist/commands/capture-sessions.js +0 -79
- package/dist/commands/capture-sessions.js.map +0 -1
- package/dist/commands/create-optimization.d.ts +0 -3
- package/dist/commands/create-optimization.d.ts.map +0 -1
- package/dist/commands/create-optimization.js.map +0 -1
|
@@ -6,6 +6,8 @@ import { loadCaptureState, getTurnsSubmitted, recordSubmission, saveCaptureState
|
|
|
6
6
|
import { fetchLastSync } from '../api/last-sync.js';
|
|
7
7
|
import { loadConfig, resolveClient } from '../config.js';
|
|
8
8
|
import { logRequest } from '../log-request.js';
|
|
9
|
+
import { parseWhen } from '../parse-when.js';
|
|
10
|
+
import { buildSessionFilter } from '../sessions/session-filter.js';
|
|
9
11
|
/** Errors that apply to every session (auth/config), so the run should abort, not keep retrying. */
|
|
10
12
|
// Errors that apply to every session (auth/config) — abort the whole run instead of
|
|
11
13
|
// counting as a per-session failure and retrying. INVALID_ARGS is included because
|
|
@@ -33,6 +35,18 @@ function resolveReferenceTime(serverTime, state) {
|
|
|
33
35
|
}
|
|
34
36
|
return new Date(0);
|
|
35
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* True when any per-run filter flag narrowed this scan. A narrowed run must NOT advance the
|
|
40
|
+
* sync cutoffs: sessions excluded this run would otherwise fall behind the new cutoff and be
|
|
41
|
+
* skipped by every future default run — silently and permanently.
|
|
42
|
+
*/
|
|
43
|
+
export function isNarrowingRun(opts) {
|
|
44
|
+
return Boolean(opts.since ||
|
|
45
|
+
opts.until ||
|
|
46
|
+
opts.projectsDir ||
|
|
47
|
+
(opts.projects && opts.projects.length > 0) ||
|
|
48
|
+
(opts.excludeProjects && opts.excludeProjects.length > 0));
|
|
49
|
+
}
|
|
36
50
|
export async function run(opts) {
|
|
37
51
|
try {
|
|
38
52
|
// (1) Resolve the client and load local state up front — both feed the reference time and the
|
|
@@ -83,12 +97,42 @@ export async function run(opts) {
|
|
|
83
97
|
// Claude Code collector and predates any Cowork uploads, so using it would silently skip
|
|
84
98
|
// never-submitted Cowork history on a reset or second-machine scenario.
|
|
85
99
|
const coworkSinceTime = state.coworkLastSyncAt ? new Date(state.coworkLastSyncAt) : new Date(0);
|
|
100
|
+
// An explicit --since replaces BOTH incremental cutoffs: the user is asking for a window, and
|
|
101
|
+
// the turn-count guard still prevents duplicate uploads when that window revisits old sessions.
|
|
102
|
+
const sinceOverride = opts.since ? parseWhen(opts.since, { now: runStartedAt, boundary: 'start' }) : null;
|
|
103
|
+
const untilTime = opts.until ? parseWhen(opts.until, { now: runStartedAt, boundary: 'end' }) : null;
|
|
104
|
+
if (sinceOverride && untilTime && sinceOverride.getTime() > untilTime.getTime()) {
|
|
105
|
+
throw new CliError('INVALID_ARGS', `--since (${opts.since}) is after --until (${opts.until}).`);
|
|
106
|
+
}
|
|
107
|
+
// Everything below runs on metadata only (folder, mtime) — a session rejected here is
|
|
108
|
+
// counted as filtered and its transcript is never read from disk.
|
|
109
|
+
const hasContentFilter = untilTime !== null ||
|
|
110
|
+
(opts.projects?.length ?? 0) > 0 ||
|
|
111
|
+
(opts.excludeProjects?.length ?? 0) > 0;
|
|
112
|
+
const preFilter = hasContentFilter
|
|
113
|
+
? buildSessionFilter({
|
|
114
|
+
untilMs: untilTime?.getTime(),
|
|
115
|
+
includeProjects: opts.projects,
|
|
116
|
+
excludeProjects: opts.excludeProjects,
|
|
117
|
+
})
|
|
118
|
+
: undefined;
|
|
119
|
+
// --projects-dir redirects the scan to a caller-chosen directory (e.g. a curated export for
|
|
120
|
+
// a compliance-scoped run); Cowork sessions live under a separate, fixed macOS path that has
|
|
121
|
+
// no equivalent override, so skip Cowork entirely rather than silently including sessions
|
|
122
|
+
// from the default location alongside the redirected Claude Code scan.
|
|
86
123
|
const [claudeResult, coworkResult] = await Promise.all([
|
|
87
|
-
scanSessions({
|
|
88
|
-
|
|
124
|
+
scanSessions({
|
|
125
|
+
projectsDir: opts.projectsDir,
|
|
126
|
+
sinceTime: sinceOverride ?? referenceTime,
|
|
127
|
+
preFilter,
|
|
128
|
+
}),
|
|
129
|
+
opts.projectsDir
|
|
130
|
+
? Promise.resolve({ envelopes: [], sessionCount: 0, filteredOut: 0, ok: true })
|
|
131
|
+
: scanCoworkSessions({ sinceTime: sinceOverride ?? coworkSinceTime, preFilter }),
|
|
89
132
|
]);
|
|
90
133
|
const envelopes = [...claudeResult.envelopes, ...coworkResult.envelopes];
|
|
91
134
|
const sessionCount = claudeResult.sessionCount + coworkResult.sessionCount;
|
|
135
|
+
const filteredCount = claudeResult.filteredOut + coworkResult.filteredOut;
|
|
92
136
|
// (4) Classify each examined session as new / updated / unchanged by comparing its current turn
|
|
93
137
|
// count against what we last submitted. The turn-count guard — not the mtime filter — is what
|
|
94
138
|
// makes re-uploads correct.
|
|
@@ -123,6 +167,7 @@ export async function run(opts) {
|
|
|
123
167
|
ok: true,
|
|
124
168
|
dryRun: true,
|
|
125
169
|
scanned: sessionCount,
|
|
170
|
+
filtered: filteredCount,
|
|
126
171
|
new: newCount,
|
|
127
172
|
updated: updatedCount,
|
|
128
173
|
unchanged: unchangedCount,
|
|
@@ -130,8 +175,9 @@ export async function run(opts) {
|
|
|
130
175
|
});
|
|
131
176
|
}
|
|
132
177
|
else {
|
|
178
|
+
const filteredNote = filteredCount > 0 ? `, ${filteredCount} filtered out` : '';
|
|
133
179
|
logger.info(`Dry run: ${newCount} new session(s), ${updatedCount} updated, ` +
|
|
134
|
-
`${unchangedCount} unchanged (${sessionCount} scanned). Nothing sent.`);
|
|
180
|
+
`${unchangedCount} unchanged (${sessionCount} scanned${filteredNote}). Nothing sent.`);
|
|
135
181
|
}
|
|
136
182
|
return ExitCode.OK;
|
|
137
183
|
}
|
|
@@ -162,11 +208,13 @@ export async function run(opts) {
|
|
|
162
208
|
logger.warn(`Failed to submit session: ${redact(err.message)}`);
|
|
163
209
|
}
|
|
164
210
|
}
|
|
165
|
-
// Advance the local cutoff ONLY when nothing failed
|
|
166
|
-
// older mtime; if we moved the cutoff past it, the next
|
|
167
|
-
// the growth would be lost.
|
|
168
|
-
//
|
|
169
|
-
|
|
211
|
+
// Advance the local cutoff ONLY when nothing failed AND no filter narrowed the run. A
|
|
212
|
+
// failed-but-grown session keeps its older mtime; if we moved the cutoff past it, the next
|
|
213
|
+
// run's mtime filter would skip it and the growth would be lost. The same applies to any
|
|
214
|
+
// session a filter excluded this run — advancing would hide it from every future default
|
|
215
|
+
// run. Use runStartedAt (captured before scanSessions) so any transcript written during the
|
|
216
|
+
// submit loop has mtime >= runStartedAt and is caught by the next run.
|
|
217
|
+
if (failed === 0 && !isNarrowingRun(opts)) {
|
|
170
218
|
state.lastSyncAt = runStartedAt.toISOString();
|
|
171
219
|
// Only advance Cowork's cutoff when the scan actually read the directory. A swallowed
|
|
172
220
|
// readdir error returns ok:false; advancing the cutoff in that case would permanently hide
|
|
@@ -188,6 +236,7 @@ export async function run(opts) {
|
|
|
188
236
|
logger.json({
|
|
189
237
|
ok: failed === 0,
|
|
190
238
|
scanned: sessionCount,
|
|
239
|
+
filtered: filteredCount,
|
|
191
240
|
new: submittedNew,
|
|
192
241
|
updated: submittedUpdated,
|
|
193
242
|
unchanged: unchangedCount,
|
|
@@ -196,8 +245,10 @@ export async function run(opts) {
|
|
|
196
245
|
}
|
|
197
246
|
else {
|
|
198
247
|
const failureNote = failed > 0 ? `, ${failed} failed` : '';
|
|
248
|
+
const filteredNote = filteredCount > 0 ? `, ${filteredCount} filtered out` : '';
|
|
249
|
+
const narrowingNote = isNarrowingRun(opts) ? ' (sync cutoff not advanced — filters active)' : '';
|
|
199
250
|
logger.info(`Submitted ${submittedNew} new, ${submittedUpdated} updated, ` +
|
|
200
|
-
`${unchangedCount} unchanged (${sessionCount} scanned)${failureNote}
|
|
251
|
+
`${unchangedCount} unchanged (${sessionCount} scanned${filteredNote})${failureNote}.${narrowingNote}`);
|
|
201
252
|
}
|
|
202
253
|
return failed === 0 ? ExitCode.OK : ExitCode.USER_ERROR;
|
|
203
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-claude-sessions.js","sourceRoot":"","sources":["../../src/commands/analyze-claude-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"analyze-claude-sessions.js","sourceRoot":"","sources":["../../src/commands/analyze-claude-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+ClD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAYrF"}
|
package/dist/commands/clients.js
CHANGED
|
@@ -16,7 +16,7 @@ async function listClients(opts) {
|
|
|
16
16
|
}
|
|
17
17
|
for (const acct of output.clients) {
|
|
18
18
|
const marker = acct.client_id === output.default_client_id ? '* ' : ' ';
|
|
19
|
-
logger.info(`${marker}${acct.client_id} ${acct.client_name} ${acct.masked_token} ${acct.base_url}`);
|
|
19
|
+
logger.info(`${marker}${acct.client_id} ${acct.client_name} ${acct.masked_token} ${acct.masked_private_key} ${acct.base_url}`);
|
|
20
20
|
}
|
|
21
21
|
return ExitCode.OK;
|
|
22
22
|
}
|
|
@@ -34,6 +34,7 @@ async function useClient(clientId, opts) {
|
|
|
34
34
|
client_id: entry.client_id,
|
|
35
35
|
client_name: entry.client_name,
|
|
36
36
|
masked_token: entry.api_key ? maskToken(entry.api_key) : '(no public key)',
|
|
37
|
+
masked_private_key: entry.private_key ? maskToken(entry.private_key) : '(no private key)',
|
|
37
38
|
base_url: entry.base_url,
|
|
38
39
|
},
|
|
39
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,UAAU,WAAW,CAAC,IAAoB;IAC7C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/commands/clients.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { logger, redact } from '../logger.js';
|
|
|
3
3
|
import { mcpCall } from './mcp-call.js';
|
|
4
4
|
export async function run(opts) {
|
|
5
5
|
try {
|
|
6
|
-
const result = await mcpCall('close_optimization', { id: opts.id,
|
|
6
|
+
const result = await mcpCall('close_optimization', { id: opts.id, explanation: opts.reason }, { clientId: opts.clientId });
|
|
7
7
|
if (opts.json) {
|
|
8
8
|
logger.json({ ok: true, result });
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-optimization.js","sourceRoot":"","sources":["../../src/commands/close-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA8B;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"close-optimization.js","sourceRoot":"","sources":["../../src/commands/close-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA8B;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3H,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-log.d.ts","sourceRoot":"","sources":["../../src/commands/fetch-log.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAsB,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAmChE"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { CliError, ExitCode } from '../errors.js';
|
|
2
2
|
import { logger, redact } from '../logger.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getLogClient, mapLogHttpError } from '../api/log-client.js';
|
|
4
4
|
export async function run(opts) {
|
|
5
5
|
try {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const coolhand = await getLogClient({ clientId: opts.clientId });
|
|
7
|
+
let contentOpts;
|
|
8
|
+
if (opts.searchQuery !== undefined) {
|
|
9
|
+
contentOpts = { searchQuery: opts.searchQuery, includeThinking: opts.includeThinking };
|
|
9
10
|
}
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
else {
|
|
12
|
+
contentOpts = { section: opts.section, maxChars: opts.maxChars, includeThinking: opts.includeThinking };
|
|
13
|
+
}
|
|
14
|
+
let result;
|
|
15
|
+
try {
|
|
16
|
+
result = await coolhand.getLogContent(opts.logId, contentOpts);
|
|
12
17
|
}
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw mapLogHttpError(err, `Log "${opts.logId}" not found (or does not belong to this client).`);
|
|
15
20
|
}
|
|
16
|
-
const result = await mcpCall('create_optimization', args, { clientId: opts.clientId });
|
|
17
21
|
if (opts.json) {
|
|
18
22
|
logger.json({ ok: true, result });
|
|
19
23
|
}
|
|
@@ -35,4 +39,4 @@ export async function run(opts) {
|
|
|
35
39
|
throw err;
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=fetch-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-log.js","sourceRoot":"","sources":["../../src/commands/fetch-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGrE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAqB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEjE,IAAI,WAAiC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1G,CAAC;QAED,IAAI,MAA4B,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,eAAe,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,KAAK,kDAAkD,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-feedback.d.ts","sourceRoot":"","sources":["../../src/commands/get-feedback.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAuCtD,wBAAsB,GAAG,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BnE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { CliError, ExitCode } from '../errors.js';
|
|
2
|
+
import { logger, redact } from '../logger.js';
|
|
3
|
+
import { getFeedbackClient, mapFeedbackHttpError } from '../api/feedback-client.js';
|
|
4
|
+
const SUMMARY_FIELDS = [
|
|
5
|
+
{ key: 'id', label: 'ID' },
|
|
6
|
+
{ key: 'sentiment', label: 'Sentiment' },
|
|
7
|
+
{ key: 'creator_type', label: 'Creator type' },
|
|
8
|
+
{ key: 'creator_unique_id', label: 'Creator ID' },
|
|
9
|
+
{ key: 'llm_request_log_id', label: 'Log ID' },
|
|
10
|
+
{ key: 'workload_id', label: 'Workload ID' },
|
|
11
|
+
{ key: 'collector', label: 'Collector' },
|
|
12
|
+
{ key: 'created_at', label: 'Created' },
|
|
13
|
+
{ key: 'updated_at', label: 'Updated' },
|
|
14
|
+
];
|
|
15
|
+
function printSummary(f) {
|
|
16
|
+
for (const { key, label } of SUMMARY_FIELDS) {
|
|
17
|
+
const v = f[key];
|
|
18
|
+
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
|
|
19
|
+
logger.info(`${label}: ${v}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (f.explanation) {
|
|
23
|
+
logger.info(`\nExplanation\n-----------\n${f.explanation}`);
|
|
24
|
+
}
|
|
25
|
+
if (f.original_output) {
|
|
26
|
+
logger.info(`\nOriginal Output\n---------------\n${f.original_output}`);
|
|
27
|
+
}
|
|
28
|
+
if (f.revised_output) {
|
|
29
|
+
logger.info(`\nRevised Output\n--------------\n${f.revised_output}`);
|
|
30
|
+
}
|
|
31
|
+
if (f.feedback_partials && f.feedback_partials.length > 0) {
|
|
32
|
+
logger.info(`\nFeedback Partials (${f.feedback_partials.length})\n------------------`);
|
|
33
|
+
for (const p of f.feedback_partials) {
|
|
34
|
+
const label = [p.sentiment ?? 'N/A', p.focus_section].filter(Boolean).join(' — ');
|
|
35
|
+
logger.info(` [${p.id}] ${label}${p.explanation ? `: ${p.explanation}` : ''}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function run(opts) {
|
|
40
|
+
try {
|
|
41
|
+
const coolhand = await getFeedbackClient({ clientId: opts.clientId });
|
|
42
|
+
let result;
|
|
43
|
+
try {
|
|
44
|
+
result = await coolhand.getFeedback(opts.id);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
throw mapFeedbackHttpError(err, `Feedback "${opts.id}" not found (or does not belong to this client).`);
|
|
48
|
+
}
|
|
49
|
+
if (opts.json) {
|
|
50
|
+
logger.json({ ok: true, result });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
printSummary(result);
|
|
54
|
+
}
|
|
55
|
+
return ExitCode.OK;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (err instanceof CliError) {
|
|
59
|
+
if (opts.json) {
|
|
60
|
+
logger.json({ ok: false, error: err.code, message: redact(err.message) });
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
logger.info(`Error: ${redact(err.message)} [${err.code}]`);
|
|
64
|
+
}
|
|
65
|
+
return err.exitCode;
|
|
66
|
+
}
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=get-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-feedback.js","sourceRoot":"","sources":["../../src/commands/get-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-optimization.d.ts","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"get-optimization.d.ts","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA+C1D,wBAAsB,GAAG,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CvE"}
|
|
@@ -1,22 +1,73 @@
|
|
|
1
1
|
import { CliError, ExitCode } from '../errors.js';
|
|
2
2
|
import { logger, redact } from '../logger.js';
|
|
3
3
|
import { mcpCall } from './mcp-call.js';
|
|
4
|
+
const SUMMARY_FIELDS = [
|
|
5
|
+
{ key: 'id', label: 'ID' },
|
|
6
|
+
{ key: 'title', label: 'Title' },
|
|
7
|
+
{ key: 'status', label: 'Status' },
|
|
8
|
+
{ key: 'optimization_type', label: 'Type' },
|
|
9
|
+
{ key: 'category', label: 'Category' },
|
|
10
|
+
{ key: 'impact', label: 'Impact' },
|
|
11
|
+
{ key: 'complexity', label: 'Complexity' },
|
|
12
|
+
{ key: 'client_name', label: 'Client' },
|
|
13
|
+
{ key: 'template_name', label: 'Template' },
|
|
14
|
+
{ key: 'workload_name', label: 'Workload' },
|
|
15
|
+
{ key: 'created_at', label: 'Created' },
|
|
16
|
+
{ key: 'dismissal_explanation', label: 'Dismissal reason' },
|
|
17
|
+
];
|
|
18
|
+
function isWrapped(wrapper) {
|
|
19
|
+
return Boolean(wrapper) && typeof wrapper.optimization === 'object' && wrapper.optimization !== null;
|
|
20
|
+
}
|
|
21
|
+
function unwrapOptimization(result) {
|
|
22
|
+
const wrapper = result;
|
|
23
|
+
return isWrapped(wrapper) ? wrapper.optimization : wrapper;
|
|
24
|
+
}
|
|
25
|
+
function stripOrchestratorMessages(r) {
|
|
26
|
+
const rest = { ...r };
|
|
27
|
+
delete rest.orchestrator_messages;
|
|
28
|
+
return rest;
|
|
29
|
+
}
|
|
30
|
+
function printSummary(r) {
|
|
31
|
+
for (const { key, label } of SUMMARY_FIELDS) {
|
|
32
|
+
const v = r[key];
|
|
33
|
+
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
|
|
34
|
+
logger.info(`${label}: ${v}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (typeof r.analysis === 'string' && r.analysis.length > 0) {
|
|
38
|
+
logger.info(`\nAnalysis\n--------\n${r.analysis}`);
|
|
39
|
+
}
|
|
40
|
+
if (typeof r.plan === 'string' && r.plan.length > 0) {
|
|
41
|
+
logger.info(`\nPlan\n----\n${r.plan}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
4
44
|
export async function run(opts) {
|
|
5
45
|
try {
|
|
6
46
|
const result = await mcpCall('get_optimization', { id: opts.id }, { clientId: opts.clientId });
|
|
47
|
+
const r = unwrapOptimization(result);
|
|
7
48
|
if (opts.json) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
else {
|
|
11
|
-
const r = result;
|
|
12
|
-
const { coding_prompt, ...rest } = r;
|
|
13
|
-
logger.info(JSON.stringify(rest, null, 2));
|
|
14
|
-
if (typeof r.pr_number === 'number' && typeof r.pr_url === 'string') {
|
|
15
|
-
logger.info(`PR: #${r.pr_number} ${r.pr_url}`);
|
|
49
|
+
if (opts.full) {
|
|
50
|
+
logger.json({ ok: true, result });
|
|
16
51
|
}
|
|
17
|
-
|
|
18
|
-
|
|
52
|
+
else {
|
|
53
|
+
const wrapper = result;
|
|
54
|
+
const stripped = isWrapped(wrapper)
|
|
55
|
+
? { ...wrapper, optimization: stripOrchestratorMessages(r) }
|
|
56
|
+
: stripOrchestratorMessages(r);
|
|
57
|
+
logger.json({ ok: true, result: stripped });
|
|
19
58
|
}
|
|
59
|
+
return ExitCode.OK;
|
|
60
|
+
}
|
|
61
|
+
printSummary(r);
|
|
62
|
+
if (typeof r.pr_number === 'number' && typeof r.pr_url === 'string') {
|
|
63
|
+
logger.info(`PR: #${r.pr_number} ${r.pr_url}`);
|
|
64
|
+
}
|
|
65
|
+
if (typeof r.coding_prompt === 'string') {
|
|
66
|
+
logger.info(`\n--- Coding Prompt ---\n${r.coding_prompt}`);
|
|
67
|
+
}
|
|
68
|
+
logger.info(`\nNext steps:\n coolhand close-optimization ${opts.id} "<reason>"\n coolhand update-optimization ${opts.id} [--title V] [--analysis V] [--plan V]`);
|
|
69
|
+
if (opts.full && r.orchestrator_messages !== undefined) {
|
|
70
|
+
logger.info(`\n--- Orchestrator Messages (--full) ---\n${JSON.stringify(r.orchestrator_messages, null, 2)}`);
|
|
20
71
|
}
|
|
21
72
|
return ExitCode.OK;
|
|
22
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-optimization.js","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAA4B;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-optimization.js","sourceRoot":"","sources":["../../src/commands/get-optimization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-call.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-call.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-call.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-call.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,OAAO,CAAC,CA6ElB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { McpService } from 'coolhand-node';
|
|
1
2
|
import { CliError } from '../errors.js';
|
|
2
3
|
import { loadConfig, resolveClient } from '../config.js';
|
|
3
4
|
import { DEFAULT_BASE_URL } from '../types.js';
|
|
@@ -52,62 +53,25 @@ export async function mcpCall(toolName, args, opts = {}) {
|
|
|
52
53
|
privateKey = envPrivateKey;
|
|
53
54
|
baseUrl = DEFAULT_BASE_URL;
|
|
54
55
|
}
|
|
55
|
-
let
|
|
56
|
+
let mcp;
|
|
56
57
|
try {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
catch {
|
|
60
|
-
throw new CliError('INVALID_BASE_URL', `Invalid base_url for client: ${baseUrl}`);
|
|
61
|
-
}
|
|
62
|
-
if (parsedBaseUrl.protocol !== 'http:' && parsedBaseUrl.protocol !== 'https:') {
|
|
63
|
-
throw new CliError('INVALID_BASE_URL', `base_url must be http or https, got: ${parsedBaseUrl.protocol}`);
|
|
64
|
-
}
|
|
65
|
-
const url = new URL('/mcp', parsedBaseUrl).toString();
|
|
66
|
-
const body = {
|
|
67
|
-
jsonrpc: '2.0',
|
|
68
|
-
id: 1,
|
|
69
|
-
method: 'tools/call',
|
|
70
|
-
params: { name: toolName, arguments: args },
|
|
71
|
-
};
|
|
72
|
-
let res;
|
|
73
|
-
try {
|
|
74
|
-
res = await fetch(url, {
|
|
75
|
-
method: 'POST',
|
|
76
|
-
headers: {
|
|
77
|
-
'Content-Type': 'application/json',
|
|
78
|
-
'X-API-Key': privateKey,
|
|
79
|
-
},
|
|
80
|
-
body: JSON.stringify(body),
|
|
81
|
-
});
|
|
58
|
+
// McpService's constructor rejects a bad base_url (https required; http only for localhost).
|
|
59
|
+
mcp = new McpService({ apiKey: privateKey, baseUrl, silent: true });
|
|
82
60
|
}
|
|
83
61
|
catch (err) {
|
|
84
|
-
throw new CliError('
|
|
85
|
-
}
|
|
86
|
-
const text = await res.text().catch(() => '');
|
|
87
|
-
const snippet = text.slice(0, 2000);
|
|
88
|
-
if (!res.ok) {
|
|
89
|
-
throw new CliError('MCP_ERROR', `MCP request failed (${res.status}): ${snippet}`);
|
|
62
|
+
throw new CliError('INVALID_BASE_URL', `Invalid base_url for client: ${baseUrl} (${err.message})`);
|
|
90
63
|
}
|
|
91
|
-
let json;
|
|
92
64
|
try {
|
|
93
|
-
|
|
65
|
+
return await mcp.mcpCall(toolName, args);
|
|
94
66
|
}
|
|
95
|
-
catch {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
// itself reports success. Every tool in this backend returns that case as a plain
|
|
104
|
-
// `{ error: "..." }` result hash rather than a top-level JSON-RPC `error`.
|
|
105
|
-
if (json.result !== null && typeof json.result === 'object' && !Array.isArray(json.result)) {
|
|
106
|
-
const result = json.result;
|
|
107
|
-
if (typeof result.error === 'string' && result.error.length > 0) {
|
|
108
|
-
throw new CliError('MCP_ERROR', result.error);
|
|
109
|
-
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// A 401 means the stored private key was rejected. Re-add the login hint that
|
|
69
|
+
// lived in the CLI before /mcp moved into coolhand-node.
|
|
70
|
+
const status = err.status;
|
|
71
|
+
const hint = status === 401
|
|
72
|
+
? " The stored private key was rejected. Run 'coolhand login --scope private' to re-authenticate."
|
|
73
|
+
: '';
|
|
74
|
+
throw new CliError('MCP_ERROR', `${err.message}${hint}`);
|
|
110
75
|
}
|
|
111
|
-
return json.result;
|
|
112
76
|
}
|
|
113
77
|
//# sourceMappingURL=mcp-call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-call.js","sourceRoot":"","sources":["../../src/commands/mcp-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAoB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,QAAgB,EAChB,IAA6B,EAC7B,OAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAE/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAEvD,0EAA0E;IAC1E,6EAA6E;IAC7E,sDAAsD;IACtD,IAAI,cAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,8CAA8C;QAC9C,oFAAoF;QACpF,2DAA2D;QAC3D,iFAAiF;QACjF,4DAA4D;QAC5D,oFAAoF;QACpF,wDAAwD;QACxD,qFAAqF;QACrF,oFAAoF;QACpF,sFAAsF;QACtF,qFAAqF;QACrF,IACE,GAAG,YAAY,QAAQ;YACvB,GAAG,CAAC,IAAI,KAAK,gBAAgB;YAC7B,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;YAC/B,CAAC,gBAAgB;YACjB,aAAa,EACb,CAAC;YACD,+DAA+D;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAe,CAAC;IAEpB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,wEAAwE,CACzE,CAAC;QACJ,CAAC;QACD,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC;QACxC,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,+EAA+E;QAC/E,oFAAoF;QACpF,UAAU,GAAG,aAAuB,CAAC;QACrC,OAAO,GAAG,gBAAgB,CAAC;IAC7B,CAAC;IACD,IAAI,
|
|
1
|
+
{"version":3,"file":"mcp-call.js","sourceRoot":"","sources":["../../src/commands/mcp-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-feedback.d.ts","sourceRoot":"","sources":["../../src/commands/search-feedback.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMzD,wBAAsB,GAAG,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgEtE"}
|