chat-recall 0.5.21 → 0.5.22
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/dist/cli.js +170 -165
- package/dist/cli.js.map +1 -1
- package/dist/install-report.d.ts +21 -0
- package/dist/install-report.d.ts.map +1 -0
- package/dist/install-report.js +76 -0
- package/dist/install-report.js.map +1 -0
- package/dist/mcp.js +3 -3
- package/dist/server-probe.d.ts +20 -0
- package/dist/server-probe.d.ts.map +1 -1
- package/dist/server-probe.js +69 -3
- package/dist/server-probe.js.map +1 -1
- package/dist/watch.js +5 -5
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** The steps that may report. A closed set: an open one turns this into a log. */
|
|
2
|
+
export type InstallStep = 'cli_login_probe' | 'cli_login_device' | 'cli_mcp_config' | 'cli_first_sync' | 'cli_node_version';
|
|
3
|
+
export interface InstallFailure {
|
|
4
|
+
step: InstallStep;
|
|
5
|
+
/** The classification, not the prose: 'dns', 'tls', 'timeout', 'HTTP 502'. */
|
|
6
|
+
reason?: string | null;
|
|
7
|
+
/** One line, already free of paths. Truncated again server-side. */
|
|
8
|
+
message?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Post one failure. Resolves whether or not it was sent.
|
|
12
|
+
*
|
|
13
|
+
* `serverUrl` decides WHERE to report and is never part of the payload. When the
|
|
14
|
+
* user has opted out, or the server has not said telemetry is allowed, this does
|
|
15
|
+
* nothing at all.
|
|
16
|
+
*/
|
|
17
|
+
export declare function reportInstallFailure(serverUrl: string, failure: InstallFailure, opts?: {
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
}): Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=install-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-report.d.ts","sourceRoot":"","sources":["../src/install-report.ts"],"names":[],"mappings":"AA4BA,kFAAkF;AAClF,MAAM,MAAM,WAAW,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D,OAAO,CAAC,OAAO,CAAC,CAoClB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tell the server that an install FAILED, when nothing else can.
|
|
3
|
+
*
|
|
4
|
+
* Every other funnel event fires after the user got past login, so a first run
|
|
5
|
+
* that dies before that is invisible: no credential, no tenant, nothing to
|
|
6
|
+
* attribute. The way the last one was found was the founder running the command
|
|
7
|
+
* on his own laptop and pasting the output. This is the mechanism that replaces
|
|
8
|
+
* that.
|
|
9
|
+
*
|
|
10
|
+
* ── What it will not do ───────────────────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* It sends a step name, a classification, a one-line message and three
|
|
13
|
+
* environment strings. Not a path, not an argument, not a stack trace, not a
|
|
14
|
+
* hostname — and `assertNoSensitiveKeys` enforces that structurally rather than
|
|
15
|
+
* by review, so the next person adding "just the server URL for context" gets a
|
|
16
|
+
* failure instead of a shipped leak.
|
|
17
|
+
*
|
|
18
|
+
* The server URL is the ONE thing worth wanting here and it is deliberately
|
|
19
|
+
* absent: a self-hoster's hostname is their infrastructure, and the failures we
|
|
20
|
+
* need to see are the hosted ones, which we already know the address of.
|
|
21
|
+
*
|
|
22
|
+
* ── Fire and forget, and silent ───────────────────────────────────────────
|
|
23
|
+
*
|
|
24
|
+
* Never awaited on the user's critical path, never logged, never able to fail a
|
|
25
|
+
* command. A diagnostic that can break an install is worse than no diagnostic.
|
|
26
|
+
*/
|
|
27
|
+
import { mayReport, userConsents, assertNoSensitiveKeys } from './telemetry-consent.js';
|
|
28
|
+
/**
|
|
29
|
+
* Post one failure. Resolves whether or not it was sent.
|
|
30
|
+
*
|
|
31
|
+
* `serverUrl` decides WHERE to report and is never part of the payload. When the
|
|
32
|
+
* user has opted out, or the server has not said telemetry is allowed, this does
|
|
33
|
+
* nothing at all.
|
|
34
|
+
*/
|
|
35
|
+
export async function reportInstallFailure(serverUrl, failure, opts = {}) {
|
|
36
|
+
if (!serverUrl)
|
|
37
|
+
return false;
|
|
38
|
+
// mayReport() needs the server to have confirmed eligibility, which it cannot
|
|
39
|
+
// have done when the very first request failed — so consent alone is the gate
|
|
40
|
+
// here, and the payload carries nothing that needs a server's permission.
|
|
41
|
+
if (!userConsents() && !mayReport(serverUrl))
|
|
42
|
+
return false;
|
|
43
|
+
const payload = {
|
|
44
|
+
step: failure.step,
|
|
45
|
+
reason: trim(failure.reason, 40),
|
|
46
|
+
message: trim(failure.message, 200),
|
|
47
|
+
cliVersion: trim(process.env.CHAT_RECALL_CLI_VERSION, 20),
|
|
48
|
+
node: trim(process.versions.node, 20),
|
|
49
|
+
os: `${process.platform}-${process.arch}`,
|
|
50
|
+
};
|
|
51
|
+
try {
|
|
52
|
+
// Structural check, not a promise in a comment. Throws on a forbidden key.
|
|
53
|
+
assertNoSensitiveKeys(payload);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const f = opts.fetchImpl || fetch;
|
|
59
|
+
try {
|
|
60
|
+
const res = await f(`${serverUrl.replace(/\/+$/, '')}/install/report`, {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: { 'content-type': 'application/json' },
|
|
63
|
+
body: JSON.stringify(payload),
|
|
64
|
+
signal: AbortSignal.timeout(opts.timeoutMs ?? 3000),
|
|
65
|
+
});
|
|
66
|
+
return res.ok || res.status === 204;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// The machine that cannot reach us cannot report. Known and accepted.
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function trim(v, n) {
|
|
74
|
+
return typeof v === 'string' && v.trim() ? v.trim().slice(0, n) : null;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=install-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-report.js","sourceRoot":"","sources":["../src/install-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAkBxF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,OAAuB,EACvB,OAAyD,EAAE;IAE3D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3D,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACzD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;KAC1C,CAAC;IAEF,IAAI,CAAC;QACH,2EAA2E;QAC3E,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;SACpD,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,CAAU,EAAE,CAAS;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC"}
|
package/dist/mcp.js
CHANGED
|
@@ -20630,7 +20630,7 @@ var init_http = __esm({
|
|
|
20630
20630
|
CLI_VERSION = JSON.parse(readFileSync37(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
|
|
20631
20631
|
} catch {
|
|
20632
20632
|
try {
|
|
20633
|
-
if (true) CLI_VERSION = "0.5.
|
|
20633
|
+
if (true) CLI_VERSION = "0.5.22";
|
|
20634
20634
|
} catch {
|
|
20635
20635
|
}
|
|
20636
20636
|
}
|
|
@@ -21142,7 +21142,7 @@ var init_telemetry = __esm({
|
|
|
21142
21142
|
init_sync_client();
|
|
21143
21143
|
cliVersion2 = () => {
|
|
21144
21144
|
try {
|
|
21145
|
-
return true ? "0.5.
|
|
21145
|
+
return true ? "0.5.22" : "dev";
|
|
21146
21146
|
} catch {
|
|
21147
21147
|
return "dev";
|
|
21148
21148
|
}
|
|
@@ -22802,7 +22802,7 @@ var init_sync_client = __esm({
|
|
|
22802
22802
|
ownVersion = JSON.parse(readFileSync39(join49(dir, "../package.json"), "utf-8")).version || ownVersion;
|
|
22803
22803
|
} catch {
|
|
22804
22804
|
try {
|
|
22805
|
-
if (true) ownVersion = "0.5.
|
|
22805
|
+
if (true) ownVersion = "0.5.22";
|
|
22806
22806
|
} catch {
|
|
22807
22807
|
}
|
|
22808
22808
|
}
|
package/dist/server-probe.d.ts
CHANGED
|
@@ -50,10 +50,19 @@ export type ProbeResult =
|
|
|
50
50
|
snippet: string;
|
|
51
51
|
}
|
|
52
52
|
/** Never got an HTTP response at all: DNS, TLS, connection, timeout. */
|
|
53
|
+
/** No HTTP response at all. `reason` names WHY — the thing `fetch failed`
|
|
54
|
+
* refuses to tell you — and `error` keeps the raw string for a report. */
|
|
53
55
|
| {
|
|
54
56
|
kind: 'unreachable';
|
|
55
57
|
error: string;
|
|
58
|
+
reason: UnreachableReason;
|
|
56
59
|
};
|
|
60
|
+
/** Why a request never got an answer. Node's fetch reports every one of these as
|
|
61
|
+
* the same five characters, "fetch failed", with the real code hidden in
|
|
62
|
+
* `err.cause`. A user pasting that string leaves nothing to diagnose — which is
|
|
63
|
+
* exactly what happened on a macOS install: the message named SSO, the cause
|
|
64
|
+
* was the network, and nobody could tell which. */
|
|
65
|
+
export type UnreachableReason = 'dns' | 'refused' | 'tls' | 'timeout' | 'reset' | 'unknown';
|
|
57
66
|
/** True when the probe proves a usable chat-recall server. */
|
|
58
67
|
export declare function probeOk(r: ProbeResult): r is Extract<ProbeResult, {
|
|
59
68
|
kind: 'ok';
|
|
@@ -73,4 +82,15 @@ export declare function probeServer(base: string, opts?: {
|
|
|
73
82
|
* One line the user can act on. Never a stack trace, always the next command.
|
|
74
83
|
*/
|
|
75
84
|
export declare function probeAdvice(r: ProbeResult, base: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Dig the real code out of a fetch failure.
|
|
87
|
+
*
|
|
88
|
+
* `err.message` on a failed `fetch` is the constant string "fetch failed" for
|
|
89
|
+
* every network cause there is. undici puts the truth in `err.cause`, one or two
|
|
90
|
+
* levels down, as a Node error code. Walk the chain and classify.
|
|
91
|
+
*/
|
|
92
|
+
export declare function classifyUnreachable(err: unknown): UnreachableReason;
|
|
93
|
+
/** The most specific string available: the underlying code where there is one,
|
|
94
|
+
* because "fetch failed" is worth nothing in a bug report. */
|
|
95
|
+
export declare function describeCause(err: unknown): string;
|
|
76
96
|
//# sourceMappingURL=server-probe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-probe.d.ts","sourceRoot":"","sources":["../src/server-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,WAAW;AACrB,+DAA+D;AAC7D;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3E,iFAAiF;GAC/E;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACnC,sDAAsD;GACpD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1C,sCAAsC;GACpC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1C,mFAAmF;GACjF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACtD,wEAAwE;
|
|
1
|
+
{"version":3,"file":"server-probe.d.ts","sourceRoot":"","sources":["../src/server-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,WAAW;AACrB,+DAA+D;AAC7D;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3E,iFAAiF;GAC/E;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACnC,sDAAsD;GACpD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1C,sCAAsC;GACpC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1C,mFAAmF;GACjF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACtD,wEAAwE;AACxE;2EAC2E;GACzE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEtE;;;;oDAIoD;AACpD,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,SAAS,GACT,KAAK,GACL,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAEjF;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC1D,OAAO,CAAC,WAAW,CAAC,CAyCtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAwChE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAgBnE;AAED;+DAC+D;AAC/D,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CASlD"}
|
package/dist/server-probe.js
CHANGED
|
@@ -40,7 +40,11 @@ export async function probeServer(base, opts = {}) {
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
catch (err) {
|
|
43
|
-
return {
|
|
43
|
+
return {
|
|
44
|
+
kind: 'unreachable',
|
|
45
|
+
error: describeCause(err),
|
|
46
|
+
reason: classifyUnreachable(err),
|
|
47
|
+
};
|
|
44
48
|
}
|
|
45
49
|
if (res.status === 401 || res.status === 403)
|
|
46
50
|
return { kind: 'unauthorized', status: res.status };
|
|
@@ -59,7 +63,7 @@ export async function probeServer(base, opts = {}) {
|
|
|
59
63
|
body = await res.text();
|
|
60
64
|
}
|
|
61
65
|
catch (err) {
|
|
62
|
-
return { kind: 'unreachable', error: err
|
|
66
|
+
return { kind: 'unreachable', error: describeCause(err), reason: classifyUnreachable(err) };
|
|
63
67
|
}
|
|
64
68
|
let parsed;
|
|
65
69
|
try {
|
|
@@ -100,7 +104,69 @@ export function probeAdvice(r, base) {
|
|
|
100
104
|
return `${base} answered ${r.status} with something that is not the chat-recall API `
|
|
101
105
|
+ `(${JSON.stringify(r.snippet)}) — check the URL, a proxy or a captive portal`;
|
|
102
106
|
case 'unreachable':
|
|
103
|
-
|
|
107
|
+
// One sentence per cause, each naming the fix rather than the error.
|
|
108
|
+
switch (r.reason) {
|
|
109
|
+
case 'dns':
|
|
110
|
+
return `cannot resolve the host in ${base} (${r.error}) — check the URL for a typo, `
|
|
111
|
+
+ 'and your DNS or VPN';
|
|
112
|
+
case 'refused':
|
|
113
|
+
return `${base} resolves but refused the connection (${r.error}) — the server is not `
|
|
114
|
+
+ 'running, or the port is wrong';
|
|
115
|
+
case 'tls':
|
|
116
|
+
return `the TLS certificate at ${base} was rejected (${r.error}) — expired, self-signed, `
|
|
117
|
+
+ 'or issued for another host. A corporate proxy that re-signs traffic does this.';
|
|
118
|
+
case 'timeout':
|
|
119
|
+
return `${base} did not answer in time (${r.error}) — a firewall or proxy that drops `
|
|
120
|
+
+ 'traffic silently looks exactly like this';
|
|
121
|
+
case 'reset':
|
|
122
|
+
return `the connection to ${base} was cut (${r.error}) — often a proxy or a captive portal`;
|
|
123
|
+
default:
|
|
124
|
+
return `no HTTP response from ${base} (${r.error}) — check the URL, DNS, or that the `
|
|
125
|
+
+ 'server is running';
|
|
126
|
+
}
|
|
104
127
|
}
|
|
105
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Dig the real code out of a fetch failure.
|
|
131
|
+
*
|
|
132
|
+
* `err.message` on a failed `fetch` is the constant string "fetch failed" for
|
|
133
|
+
* every network cause there is. undici puts the truth in `err.cause`, one or two
|
|
134
|
+
* levels down, as a Node error code. Walk the chain and classify.
|
|
135
|
+
*/
|
|
136
|
+
export function classifyUnreachable(err) {
|
|
137
|
+
if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError'))
|
|
138
|
+
return 'timeout';
|
|
139
|
+
for (let e = err, depth = 0; e && depth < 5; depth++) {
|
|
140
|
+
const code = String(e.code ?? '');
|
|
141
|
+
const msg = String(e.message ?? '');
|
|
142
|
+
if (code === 'ENOTFOUND' || code === 'EAI_AGAIN')
|
|
143
|
+
return 'dns';
|
|
144
|
+
if (code === 'ECONNREFUSED')
|
|
145
|
+
return 'refused';
|
|
146
|
+
if (code === 'ECONNRESET' || code === 'EPIPE')
|
|
147
|
+
return 'reset';
|
|
148
|
+
if (code === 'ETIMEDOUT' || code === 'UND_ERR_CONNECT_TIMEOUT' || code === 'UND_ERR_HEADERS_TIMEOUT')
|
|
149
|
+
return 'timeout';
|
|
150
|
+
// TLS codes are many and all start the same way, plus the self-signed pair.
|
|
151
|
+
if (code.startsWith('CERT_') || code.startsWith('ERR_TLS')
|
|
152
|
+
|| code === 'DEPTH_ZERO_SELF_SIGNED_CERT' || code === 'SELF_SIGNED_CERT_IN_CHAIN'
|
|
153
|
+
|| code === 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' || /certificate/i.test(msg))
|
|
154
|
+
return 'tls';
|
|
155
|
+
e = e.cause;
|
|
156
|
+
}
|
|
157
|
+
return 'unknown';
|
|
158
|
+
}
|
|
159
|
+
/** The most specific string available: the underlying code where there is one,
|
|
160
|
+
* because "fetch failed" is worth nothing in a bug report. */
|
|
161
|
+
export function describeCause(err) {
|
|
162
|
+
const parts = [];
|
|
163
|
+
for (let e = err, depth = 0; e && depth < 5; depth++) {
|
|
164
|
+
const code = e.code;
|
|
165
|
+
if (typeof code === 'string' && code && !parts.includes(code))
|
|
166
|
+
parts.push(code);
|
|
167
|
+
e = e.cause;
|
|
168
|
+
}
|
|
169
|
+
const base = err instanceof Error ? err.message : String(err);
|
|
170
|
+
return parts.length ? `${base}: ${parts.join(' → ')}` : base;
|
|
171
|
+
}
|
|
106
172
|
//# sourceMappingURL=server-probe.js.map
|
package/dist/server-probe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-probe.js","sourceRoot":"","sources":["../src/server-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"server-probe.js","sourceRoot":"","sources":["../src/server-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.js
CHANGED
|
@@ -19210,7 +19210,7 @@ var init_http = __esm({
|
|
|
19210
19210
|
CLI_VERSION = JSON.parse(readFileSync33(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
|
|
19211
19211
|
} catch {
|
|
19212
19212
|
try {
|
|
19213
|
-
if (true) CLI_VERSION = "0.5.
|
|
19213
|
+
if (true) CLI_VERSION = "0.5.22";
|
|
19214
19214
|
} catch {
|
|
19215
19215
|
}
|
|
19216
19216
|
}
|
|
@@ -19718,7 +19718,7 @@ var init_telemetry = __esm({
|
|
|
19718
19718
|
init_sync_client();
|
|
19719
19719
|
cliVersion = () => {
|
|
19720
19720
|
try {
|
|
19721
|
-
return true ? "0.5.
|
|
19721
|
+
return true ? "0.5.22" : "dev";
|
|
19722
19722
|
} catch {
|
|
19723
19723
|
return "dev";
|
|
19724
19724
|
}
|
|
@@ -21414,7 +21414,7 @@ var init_sync_client = __esm({
|
|
|
21414
21414
|
ownVersion = JSON.parse(readFileSync37(join44(dir, "../package.json"), "utf-8")).version || ownVersion;
|
|
21415
21415
|
} catch {
|
|
21416
21416
|
try {
|
|
21417
|
-
if (true) ownVersion = "0.5.
|
|
21417
|
+
if (true) ownVersion = "0.5.22";
|
|
21418
21418
|
} catch {
|
|
21419
21419
|
}
|
|
21420
21420
|
}
|
|
@@ -24207,7 +24207,7 @@ try {
|
|
|
24207
24207
|
ownVersion2 = JSON.parse(readFileSync41(join49(dir, "../package.json"), "utf-8")).version || ownVersion2;
|
|
24208
24208
|
} catch {
|
|
24209
24209
|
try {
|
|
24210
|
-
if (true) ownVersion2 = "0.5.
|
|
24210
|
+
if (true) ownVersion2 = "0.5.22";
|
|
24211
24211
|
} catch {
|
|
24212
24212
|
}
|
|
24213
24213
|
}
|
|
@@ -24551,7 +24551,7 @@ async function runCollectorMigration(opts) {
|
|
|
24551
24551
|
init_sync_ledger();
|
|
24552
24552
|
init_collector_health();
|
|
24553
24553
|
import { existsSync as existsSync50, readFileSync as readFileSync46 } from "fs";
|
|
24554
|
-
var CLI_VERSION3 = true ? "0.5.
|
|
24554
|
+
var CLI_VERSION3 = true ? "0.5.22" : "0.0.0";
|
|
24555
24555
|
var DEBOUNCE_MS = 5e3;
|
|
24556
24556
|
var CLAUDE_DIR = claudeBackend.projectsDir();
|
|
24557
24557
|
var PLANS_DIR = claudeBackend.plansDir();
|