coolhand-cli 0.7.0 → 0.8.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 +21 -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/bin.js +0 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +170 -4
- 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/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/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 +35 -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 +2 -2
- 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 +0 -38
- package/dist/commands/create-optimization.js.map +0 -1
|
@@ -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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { CliError, ExitCode } from '../errors.js';
|
|
2
|
+
import { logger, redact } from '../logger.js';
|
|
3
|
+
import { getFeedbackClient, mapFeedbackHttpError } from '../api/feedback-client.js';
|
|
4
|
+
/** `sentiment` is stored server-side as an integer code (0=dislike, 1=neutral, 2=like); Ransack's
|
|
5
|
+
* `sentiment_eq` predicate takes that raw code, not the string label. */
|
|
6
|
+
const SENTIMENT_CODES = { negative: 0, neutral: 1, positive: 2 };
|
|
7
|
+
export async function run(opts) {
|
|
8
|
+
try {
|
|
9
|
+
const coolhand = await getFeedbackClient({ clientId: opts.clientId });
|
|
10
|
+
const params = {};
|
|
11
|
+
if (opts.sentiment !== undefined) {
|
|
12
|
+
params.sentiment_eq = SENTIMENT_CODES[opts.sentiment];
|
|
13
|
+
}
|
|
14
|
+
if (opts.search !== undefined) {
|
|
15
|
+
params.explanation_cont = opts.search;
|
|
16
|
+
}
|
|
17
|
+
if (opts.creatorId !== undefined) {
|
|
18
|
+
params.creator_unique_id_eq = opts.creatorId;
|
|
19
|
+
}
|
|
20
|
+
if (opts.workloadId !== undefined) {
|
|
21
|
+
params.workload_id_eq = opts.workloadId;
|
|
22
|
+
}
|
|
23
|
+
if (opts.matched === true) {
|
|
24
|
+
params.llm_request_log_id_not_null = 1;
|
|
25
|
+
}
|
|
26
|
+
if (opts.unmatched === true) {
|
|
27
|
+
params.llm_request_log_id_null = 1;
|
|
28
|
+
}
|
|
29
|
+
if (opts.since !== undefined) {
|
|
30
|
+
params.created_at_gteq = opts.since;
|
|
31
|
+
}
|
|
32
|
+
if (opts.sortBy !== undefined) {
|
|
33
|
+
params.s = `${opts.sortBy} ${opts.sortDir ?? 'desc'}`;
|
|
34
|
+
}
|
|
35
|
+
if (opts.page !== undefined) {
|
|
36
|
+
params.page = opts.page;
|
|
37
|
+
}
|
|
38
|
+
if (opts.perPage !== undefined) {
|
|
39
|
+
params.per = opts.perPage;
|
|
40
|
+
}
|
|
41
|
+
let result;
|
|
42
|
+
try {
|
|
43
|
+
result = await coolhand.searchFeedback(params);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
throw mapFeedbackHttpError(err, 'Feedback search failed.');
|
|
47
|
+
}
|
|
48
|
+
if (opts.json) {
|
|
49
|
+
logger.json({ ok: true, result });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const { pagination } = result;
|
|
53
|
+
logger.info(`Page ${pagination.current_page} of ${pagination.total_pages} (${pagination.total_count} total) — use --page N to navigate`);
|
|
54
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
55
|
+
}
|
|
56
|
+
return ExitCode.OK;
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
if (err instanceof CliError) {
|
|
60
|
+
if (opts.json) {
|
|
61
|
+
logger.json({ ok: false, error: err.code, message: redact(err.message) });
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
logger.info(`Error: ${redact(err.message)} [${err.code}]`);
|
|
65
|
+
}
|
|
66
|
+
return err.exitCode;
|
|
67
|
+
}
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=search-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-feedback.js","sourceRoot":"","sources":["../../src/commands/search-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,GAAG,YAAY,CAa3F;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB9D"}
|
package/dist/commands/status.js
CHANGED
|
@@ -7,6 +7,7 @@ export function buildStatusOutput(cfg) {
|
|
|
7
7
|
client_id: entry.client_id,
|
|
8
8
|
client_name: entry.client_name,
|
|
9
9
|
masked_token: entry.api_key ? maskToken(entry.api_key) : '(no public key)',
|
|
10
|
+
masked_private_key: entry.private_key ? maskToken(entry.private_key) : '(no private key)',
|
|
10
11
|
base_url: entry.base_url,
|
|
11
12
|
}));
|
|
12
13
|
return {
|
|
@@ -24,7 +25,7 @@ export async function run(opts) {
|
|
|
24
25
|
logger.json({ ...output, configured });
|
|
25
26
|
}
|
|
26
27
|
else if (configured && target) {
|
|
27
|
-
logger.info(`Configured: "${target.client_name}" (${target.client_id}) — ${target.api_key ? maskToken(target.api_key) : '(no public key)'}`);
|
|
28
|
+
logger.info(`Configured: "${target.client_name}" (${target.client_id}) — ${target.api_key ? maskToken(target.api_key) : '(no public key)'}, ${target.private_key ? maskToken(target.private_key) : '(no private key)'}`);
|
|
28
29
|
}
|
|
29
30
|
else if (opts.clientId) {
|
|
30
31
|
logger.info(`No token configured for client "${opts.clientId}".`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,UAAU,iBAAiB,CAAC,GAA2C;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAC1E,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC9B,OAAO;QACP,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAmB;IAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAEvE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,UAAU,iBAAiB,CAAC,GAA2C;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAC1E,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB;QACzF,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC9B,OAAO;QACP,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAmB;IAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAEvE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CACT,gBAAgB,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,SAAS,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC5M,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;AACxD,CAAC"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -14,7 +14,7 @@ export async function run(opts) {
|
|
|
14
14
|
}
|
|
15
15
|
return ExitCode.USER_ERROR;
|
|
16
16
|
}
|
|
17
|
-
logger.info(`Logged in as "${entry.client_name}" (id: ${entry.client_id}) via ${entry.base_url} — ${entry.api_key ? maskToken(entry.api_key) : '(no public key)'}`);
|
|
17
|
+
logger.info(`Logged in as "${entry.client_name}" (id: ${entry.client_id}) via ${entry.base_url} — ${entry.api_key ? maskToken(entry.api_key) : '(no public key)'}, ${entry.private_key ? maskToken(entry.private_key) : '(no private key)'}`);
|
|
18
18
|
return ExitCode.OK;
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=whoami.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAmB;IAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,IAAI,CACT,iBAAiB,KAAK,CAAC,WAAW,UAAU,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAmB;IAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,IAAI,CACT,iBAAiB,KAAK,CAAC,WAAW,UAAU,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CACjO,CAAC;IACF,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM1D,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAMD,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAyBtD;AAWD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAMrF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM1D,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAMD,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAyBtD;AAWD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAMrF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAY9F;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgB/E;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQtE;AA2CD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyE5F"}
|
package/dist/config.js
CHANGED
|
@@ -101,7 +101,11 @@ export function getClient(cfg, clientId) {
|
|
|
101
101
|
}
|
|
102
102
|
export async function upsertClient(entry, makeDefault = true) {
|
|
103
103
|
const cfg = await loadConfig();
|
|
104
|
-
|
|
104
|
+
// Merge onto any existing entry for this client_id so a partial entry (e.g. a
|
|
105
|
+
// public-only re-login) doesn't silently drop fields it didn't provide, such as a
|
|
106
|
+
// previously-stored private_key.
|
|
107
|
+
const existing = cfg.clients[entry.client_id];
|
|
108
|
+
cfg.clients[entry.client_id] = existing ? { ...existing, ...entry } : entry;
|
|
105
109
|
if (makeDefault || !cfg.default_client_id) {
|
|
106
110
|
cfg.default_client_id = entry.client_id;
|
|
107
111
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare enum ExitCode {
|
|
|
4
4
|
INTERNAL = 2,
|
|
5
5
|
ABORTED = 130
|
|
6
6
|
}
|
|
7
|
-
export type ErrorCode = 'TIMEOUT' | 'STATE_MISMATCH' | 'INVALID_CALLBACK' | 'BROWSER_FAILED' | 'CONFIG_WRITE_FAILED' | 'CONFIG_READ_FAILED' | 'NOT_CONFIGURED' | 'INVALID_REDIRECT_URI' | 'INVALID_BASE_URL' | 'INVALID_ARGS' | 'WRITE_ENV_FAILED' | 'CLIENT_NOT_FOUND' | 'NO_PRIVATE_KEY' | 'MCP_ERROR' | 'INGEST_ERROR';
|
|
7
|
+
export type ErrorCode = 'TIMEOUT' | 'STATE_MISMATCH' | 'INVALID_CALLBACK' | 'BROWSER_FAILED' | 'CONFIG_WRITE_FAILED' | 'CONFIG_READ_FAILED' | 'NOT_CONFIGURED' | 'INVALID_REDIRECT_URI' | 'INVALID_BASE_URL' | 'INVALID_ARGS' | 'WRITE_ENV_FAILED' | 'CLIENT_NOT_FOUND' | 'NO_PRIVATE_KEY' | 'MCP_ERROR' | 'INGEST_ERROR' | 'FEEDBACK_ERROR';
|
|
8
8
|
export declare class CliError extends Error {
|
|
9
9
|
readonly code: ErrorCode;
|
|
10
10
|
readonly exitCode: number;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,EAAE,IAAI;IACN,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,OAAO,MAAM;CACd;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,sBAAsB,GACtB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,EAAE,IAAI;IACN,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,OAAO,MAAM;CACd;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,sBAAsB,GACtB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,gBAAgB,CAAC;AAErB,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA4B;CAMrF"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,mCAAM,CAAA;IACN,mDAAc,CAAA;IACd,+CAAY,CAAA;IACZ,+CAAa,CAAA;AACf,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,mCAAM,CAAA;IACN,mDAAc,CAAA;IACd,+CAAY,CAAA;IACZ,+CAAa,CAAA;AACf,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAoBD,MAAM,OAAO,QAAS,SAAQ,KAAK;IAIjC,YAAY,IAAe,EAAE,OAAe,EAAE,WAAmB,QAAQ,CAAC,UAAU;QAClF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a user-supplied point in time for --since/--until style flags.
|
|
3
|
+
*
|
|
4
|
+
* Accepted forms:
|
|
5
|
+
* - `Nh` / `Nd` / `Nw` — N hours/days/weeks before `now` (e.g. `7d`).
|
|
6
|
+
* - `YYYY-MM-DD` — a local calendar day; `boundary` picks its start (00:00:00.000)
|
|
7
|
+
* or end (23:59:59.999) so `--until 2026-06-30` includes the whole day.
|
|
8
|
+
* - anything `new Date()` accepts, e.g. a full ISO datetime.
|
|
9
|
+
*
|
|
10
|
+
* `now` is injected rather than read from the clock so callers share one reference
|
|
11
|
+
* instant per run and tests are deterministic.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseWhen(input: string, opts: {
|
|
14
|
+
now: Date;
|
|
15
|
+
boundary: 'start' | 'end';
|
|
16
|
+
}): Date;
|
|
17
|
+
//# sourceMappingURL=parse-when.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-when.d.ts","sourceRoot":"","sources":["../src/parse-when.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,GAAG,IAAI,CA8C7F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { CliError } from './errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a user-supplied point in time for --since/--until style flags.
|
|
4
|
+
*
|
|
5
|
+
* Accepted forms:
|
|
6
|
+
* - `Nh` / `Nd` / `Nw` — N hours/days/weeks before `now` (e.g. `7d`).
|
|
7
|
+
* - `YYYY-MM-DD` — a local calendar day; `boundary` picks its start (00:00:00.000)
|
|
8
|
+
* or end (23:59:59.999) so `--until 2026-06-30` includes the whole day.
|
|
9
|
+
* - anything `new Date()` accepts, e.g. a full ISO datetime.
|
|
10
|
+
*
|
|
11
|
+
* `now` is injected rather than read from the clock so callers share one reference
|
|
12
|
+
* instant per run and tests are deterministic.
|
|
13
|
+
*/
|
|
14
|
+
export function parseWhen(input, opts) {
|
|
15
|
+
const trimmed = input.trim();
|
|
16
|
+
const duration = trimmed.match(/^(\d+)([hdw])$/);
|
|
17
|
+
if (duration) {
|
|
18
|
+
const count = Number(duration[1]);
|
|
19
|
+
const unitMs = { h: 3600000, d: 86400000, w: 604800000 }[duration[2]];
|
|
20
|
+
return new Date(opts.now.getTime() - count * unitMs);
|
|
21
|
+
}
|
|
22
|
+
const day = trimmed.match(/^(\d{4})-(\d{2})-(\d{2})$/);
|
|
23
|
+
if (day) {
|
|
24
|
+
const [, year, month, dayOfMonth] = day;
|
|
25
|
+
// Construct via local components (not the ISO string, which Date parses as UTC)
|
|
26
|
+
// so the day boundary matches the user's timezone.
|
|
27
|
+
const parsed = opts.boundary === 'start'
|
|
28
|
+
? new Date(Number(year), Number(month) - 1, Number(dayOfMonth), 0, 0, 0, 0)
|
|
29
|
+
: new Date(Number(year), Number(month) - 1, Number(dayOfMonth), 23, 59, 59, 999);
|
|
30
|
+
// Date silently rolls invalid components over into the next day/month (e.g. 2026-02-30
|
|
31
|
+
// becomes March 2nd) instead of rejecting them, so confirm the parsed date's components
|
|
32
|
+
// still match what was typed before accepting it.
|
|
33
|
+
const rolledOver = parsed.getFullYear() !== Number(year) ||
|
|
34
|
+
parsed.getMonth() !== Number(month) - 1 ||
|
|
35
|
+
parsed.getDate() !== Number(dayOfMonth);
|
|
36
|
+
if (Number.isNaN(parsed.getTime()) || rolledOver) {
|
|
37
|
+
throw new CliError('INVALID_ARGS', `Invalid date "${input}". Use YYYY-MM-DD, an ISO datetime, or a duration like 12h, 7d, 2w.`);
|
|
38
|
+
}
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
if (trimmed) {
|
|
42
|
+
const parsed = new Date(trimmed);
|
|
43
|
+
if (!Number.isNaN(parsed.getTime())) {
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new CliError('INVALID_ARGS', `Invalid date "${input}". Use YYYY-MM-DD, an ISO datetime, or a duration like 12h, 7d, 2w.`);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=parse-when.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-when.js","sourceRoot":"","sources":["../src/parse-when.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAA8C;IACrF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,OAAS,EAAE,CAAC,EAAE,QAAU,EAAE,CAAC,EAAE,SAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAoB,CAAC,CAAC;QAC/F,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACvD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC;QACxC,gFAAgF;QAChF,mDAAmD;QACnD,MAAM,MAAM,GACV,IAAI,CAAC,QAAQ,KAAK,OAAO;YACvB,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACrF,uFAAuF;QACvF,wFAAwF;QACxF,kDAAkD;QAClD,MAAM,UAAU,GACd,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC;YACrC,MAAM,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACvC,MAAM,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;YACjD,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,iBAAiB,KAAK,qEAAqE,CAC5F,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,iBAAiB,KAAK,qEAAqE,CAC5F,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SessionFileMeta } from './session-filter.js';
|
|
1
2
|
/** One message in the reconstructed conversation. */
|
|
2
3
|
export interface ConversationMessage {
|
|
3
4
|
role: string;
|
|
@@ -7,7 +8,8 @@ export interface ConversationMessage {
|
|
|
7
8
|
* An Anthropic-shaped envelope for ONE whole Claude Code session (a conversation). The server's
|
|
8
9
|
* `claude_code` ingestor recognises it by the synthetic `claudecode://session/<sessionId>` url,
|
|
9
10
|
* stores the full back-and-forth (the server already treats a multi-message request as one "chat"
|
|
10
|
-
* log), and deduplicates on the session id. `request_body.messages` is the conversation
|
|
11
|
+
* log), and deduplicates on the session id. `request_body.messages` is the conversation — including
|
|
12
|
+
* tool calls and tool results, serialised into each message's text so nothing is lost;
|
|
11
13
|
* `response_body` is the final assistant turn; `response_body.usage` is the session's summed tokens.
|
|
12
14
|
*/
|
|
13
15
|
export interface CaptureEnvelope {
|
|
@@ -32,6 +34,8 @@ export interface CaptureEnvelope {
|
|
|
32
34
|
export interface ScanResult {
|
|
33
35
|
envelopes: CaptureEnvelope[];
|
|
34
36
|
sessionCount: number;
|
|
37
|
+
/** Number of session files rejected by the caller's preFilter — skipped without being read. */
|
|
38
|
+
filteredOut: number;
|
|
35
39
|
/** False when the scan directory could not be read and the error was swallowed. The caller must
|
|
36
40
|
* not advance its mtime cutoff in this case — doing so would permanently hide pre-existing files
|
|
37
41
|
* whose mtimes predate the new cutoff, since the turn-count guard never sees them if they are
|
|
@@ -43,6 +47,11 @@ export declare function defaultProjectsDir(): string;
|
|
|
43
47
|
* Parse one transcript's raw text (newline-delimited JSON) into a SINGLE session envelope holding
|
|
44
48
|
* the whole conversation — one log per session, not one per turn. Returns `null` when the transcript
|
|
45
49
|
* contains no assistant turns. Pure function (no filesystem) so it is easy to unit test.
|
|
50
|
+
*
|
|
51
|
+
* Real transcripts split a single assistant API call across MULTIPLE lines — one per content block
|
|
52
|
+
* (thinking / text / tool_use) — and repeat the identical `usage` on every line. We therefore merge
|
|
53
|
+
* lines that share a `requestId` into one assistant message and count each turn (and its tokens)
|
|
54
|
+
* exactly once, matching benchmark/lib/transcript.mjs.
|
|
46
55
|
*/
|
|
47
56
|
export declare function parseTranscript(content: string, sessionId: string): CaptureEnvelope | null;
|
|
48
57
|
/**
|
|
@@ -52,10 +61,14 @@ export declare function parseTranscript(content: string, sessionId: string): Cap
|
|
|
52
61
|
* When `sinceTime` is given, files whose last-modified time is older than it are skipped entirely
|
|
53
62
|
* (not even read) — they cannot have grown since the last sync. `sessionCount` therefore counts only
|
|
54
63
|
* the files actually examined this run, so it reflects the work done rather than the whole corpus.
|
|
64
|
+
*
|
|
65
|
+
* When `preFilter` is given it runs on each file's metadata (id, project folder, mtime) BEFORE the
|
|
66
|
+
* file is read; a rejected file is counted in `filteredOut` and its content never leaves disk.
|
|
55
67
|
*/
|
|
56
68
|
export declare function scanSessions(options?: {
|
|
57
69
|
projectsDir?: string;
|
|
58
70
|
sinceTime?: Date;
|
|
71
|
+
preFilter?: (meta: SessionFileMeta) => boolean;
|
|
59
72
|
}): Promise<ScanResult>;
|
|
60
73
|
/** The session id this envelope represents — used as the local dedup key. */
|
|
61
74
|
export declare function sessionIdOf(envelope: CaptureEnvelope): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-scanner.d.ts","sourceRoot":"","sources":["../../src/sessions/claude-scanner.ts"],"names":[],"mappings":"AAIA,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"claude-scanner.d.ts","sourceRoot":"","sources":["../../src/sessions/claude-scanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;KACjC,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB;;;sBAGkB;IAClB,EAAE,EAAE,OAAO,CAAC;CACb;AAKD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAsJD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAyH1F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC;CAC3C,GACL,OAAO,CAAC,UAAU,CAAC,CA8ErB;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAG7D"}
|