chat-recall 0.5.5 → 0.5.7
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 +332 -0
- package/dist/cli.js +11473 -8310
- package/dist/cli.js.map +1 -1
- package/dist/code-index-cursor.d.ts +18 -0
- package/dist/code-index-cursor.d.ts.map +1 -0
- package/dist/code-index-cursor.js +89 -0
- package/dist/code-index-cursor.js.map +1 -0
- package/dist/daemon-log.d.ts +44 -0
- package/dist/daemon-log.d.ts.map +1 -0
- package/dist/daemon-log.js +74 -0
- package/dist/daemon-log.js.map +1 -0
- package/dist/derived.d.ts +20 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +106 -0
- package/dist/derived.js.map +1 -0
- package/dist/install-skills.d.ts.map +1 -1
- package/dist/install-skills.js +6 -1
- package/dist/install-skills.js.map +1 -1
- package/dist/log-rotate.d.ts +16 -0
- package/dist/log-rotate.d.ts.map +1 -0
- package/dist/log-rotate.js +50 -0
- package/dist/log-rotate.js.map +1 -0
- package/dist/mcp-diagnostics.d.ts.map +1 -1
- package/dist/mcp-diagnostics.js +10 -8
- package/dist/mcp-diagnostics.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +5763 -3045
- package/dist/mcp.js.map +1 -1
- package/dist/project-tasks.d.ts.map +1 -1
- package/dist/project-tasks.js +13 -8
- package/dist/project-tasks.js.map +1 -1
- package/dist/redact-deep.d.ts +4 -0
- package/dist/redact-deep.d.ts.map +1 -0
- package/dist/redact-deep.js +26 -0
- package/dist/redact-deep.js.map +1 -0
- package/dist/scan-pool.d.ts +56 -0
- package/dist/scan-pool.d.ts.map +1 -0
- package/dist/scan-pool.js +245 -0
- package/dist/scan-pool.js.map +1 -0
- package/dist/scan-worker.d.ts +78 -0
- package/dist/scan-worker.d.ts.map +1 -0
- package/dist/scan-worker.js +11175 -0
- package/dist/scan-worker.js.map +1 -0
- package/dist/self-restart.d.ts +20 -2
- package/dist/self-restart.d.ts.map +1 -1
- package/dist/self-restart.js +16 -6
- package/dist/self-restart.js.map +1 -1
- package/dist/server-probe.d.ts +76 -0
- package/dist/server-probe.d.ts.map +1 -0
- package/dist/server-probe.js +106 -0
- package/dist/server-probe.js.map +1 -0
- package/dist/service-installer.d.ts +1 -1
- package/dist/service-installer.d.ts.map +1 -1
- package/dist/service-installer.js +20 -6
- package/dist/service-installer.js.map +1 -1
- package/dist/sync-client.d.ts +25 -0
- package/dist/sync-client.d.ts.map +1 -1
- package/dist/sync-client.js +590 -176
- package/dist/sync-client.js.map +1 -1
- package/dist/sync-ledger.d.ts +22 -0
- package/dist/sync-ledger.d.ts.map +1 -1
- package/dist/sync-ledger.js +108 -1
- package/dist/sync-ledger.js.map +1 -1
- package/dist/target-breaker.d.ts +61 -0
- package/dist/target-breaker.d.ts.map +1 -0
- package/dist/target-breaker.js +85 -0
- package/dist/target-breaker.js.map +1 -0
- package/dist/telemetry-consent.d.ts +31 -0
- package/dist/telemetry-consent.d.ts.map +1 -0
- package/dist/telemetry-consent.js +115 -0
- package/dist/telemetry-consent.js.map +1 -0
- package/dist/telemetry.d.ts +22 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +125 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tick-queue.d.ts +67 -0
- package/dist/tick-queue.d.ts.map +1 -0
- package/dist/tick-queue.js +104 -0
- package/dist/tick-queue.js.map +1 -0
- package/dist/transport-safety.d.ts +43 -0
- package/dist/transport-safety.d.ts.map +1 -0
- package/dist/transport-safety.js +100 -0
- package/dist/transport-safety.js.map +1 -0
- package/dist/verify-repair.js +1 -1
- package/dist/verify-repair.js.map +1 -1
- package/dist/watch.js +8887 -6028
- package/hooks/chat_recall_escalate_hook.sh +28 -2
- package/hooks/chat_recall_save_hook.sh +17 -11
- package/hooks/chat_recall_wakeup_hook.sh +27 -1
- package/package.json +27 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-worker.js","sourceRoot":"","sources":["../src/scan-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/self-restart.d.ts
CHANGED
|
@@ -43,12 +43,30 @@ export declare const EXIT_CODE_CODE_CHANGED = 75;
|
|
|
43
43
|
export interface CodeFingerprint {
|
|
44
44
|
path: string;
|
|
45
45
|
size: number;
|
|
46
|
-
|
|
46
|
+
/**
|
|
47
|
+
* SHA-256 of the bundle bytes.
|
|
48
|
+
*
|
|
49
|
+
* mtime is deliberately NOT part of the identity. It was, and it made this
|
|
50
|
+
* guard fire on rebuilds that changed nothing: an `npm i -g` of the SAME
|
|
51
|
+
* version rewrites the file, so the mtime moves while every byte stays equal.
|
|
52
|
+
* The log read `changed on disk (731957 -> 731957 bytes)` 90 times in one
|
|
53
|
+
* day, and each line was a real process exit — 90 restarts that picked up no
|
|
54
|
+
* new code, on top of a daemon that was already crash-looping.
|
|
55
|
+
*
|
|
56
|
+
* The content hash answers the actual question. An identical rebuild is not a
|
|
57
|
+
* change, and a same-size edit still is.
|
|
58
|
+
*/
|
|
59
|
+
hash: string;
|
|
47
60
|
}
|
|
48
61
|
/**
|
|
49
62
|
* Identity of the bundle we are running. The build produces a single bundled
|
|
50
|
-
* `watch.js` (engine included), so one
|
|
63
|
+
* `watch.js` (engine included), so one file answers "did my code change?" —
|
|
51
64
|
* no need to walk node_modules.
|
|
65
|
+
*
|
|
66
|
+
* This reads the bundle (~750 KB) rather than stat-ing it. The caller is a
|
|
67
|
+
* 60-second liveness tick, so the cost is one hash per minute, and correctness
|
|
68
|
+
* here is worth far more than the microseconds: a false positive exits the
|
|
69
|
+
* process, and a false negative leaves a fixed daemon running broken code.
|
|
52
70
|
*/
|
|
53
71
|
export declare function codeFingerprint(entry?: string): CodeFingerprint | null;
|
|
54
72
|
export declare function sameFingerprint(a: CodeFingerprint | null, b: CodeFingerprint | null): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-restart.d.ts","sourceRoot":"","sources":["../src/self-restart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;
|
|
1
|
+
{"version":3,"file":"self-restart.d.ts","sourceRoot":"","sources":["../src/self-restart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAMH,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,SAAkB,GAAG,eAAe,GAAG,IAAI,CAY/E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAG7F;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,CAAC;AAEzE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,QAAQ,kBAAmB,GAAG,UAAU,CAK9G;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAU/D;AAkBD,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1B,iBAAiB;IACjB,GAAG,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAuBlE"}
|
package/dist/self-restart.js
CHANGED
|
@@ -39,29 +39,39 @@
|
|
|
39
39
|
* re-rendering anyone's unit file.
|
|
40
40
|
*/
|
|
41
41
|
import { spawn } from 'child_process';
|
|
42
|
-
import {
|
|
42
|
+
import { readFileSync } from 'fs';
|
|
43
|
+
import { createHash } from 'crypto';
|
|
43
44
|
/** Non-zero so systemd's `Restart=on-failure` picks it up. EX_TEMPFAIL. */
|
|
44
45
|
export const EXIT_CODE_CODE_CHANGED = 75;
|
|
45
46
|
/**
|
|
46
47
|
* Identity of the bundle we are running. The build produces a single bundled
|
|
47
|
-
* `watch.js` (engine included), so one
|
|
48
|
+
* `watch.js` (engine included), so one file answers "did my code change?" —
|
|
48
49
|
* no need to walk node_modules.
|
|
50
|
+
*
|
|
51
|
+
* This reads the bundle (~750 KB) rather than stat-ing it. The caller is a
|
|
52
|
+
* 60-second liveness tick, so the cost is one hash per minute, and correctness
|
|
53
|
+
* here is worth far more than the microseconds: a false positive exits the
|
|
54
|
+
* process, and a false negative leaves a fixed daemon running broken code.
|
|
49
55
|
*/
|
|
50
56
|
export function codeFingerprint(entry = process.argv[1]) {
|
|
51
57
|
if (!entry)
|
|
52
58
|
return null;
|
|
53
59
|
try {
|
|
54
|
-
const
|
|
55
|
-
return {
|
|
60
|
+
const buf = readFileSync(entry);
|
|
61
|
+
return {
|
|
62
|
+
path: entry,
|
|
63
|
+
size: buf.byteLength,
|
|
64
|
+
hash: createHash('sha256').update(buf).digest('hex'),
|
|
65
|
+
};
|
|
56
66
|
}
|
|
57
67
|
catch {
|
|
58
|
-
return null; // running from a pipe/eval — nothing to
|
|
68
|
+
return null; // running from a pipe/eval, or a half-written bundle — nothing to act on
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
71
|
export function sameFingerprint(a, b) {
|
|
62
72
|
if (!a || !b)
|
|
63
73
|
return true; // unknown ⇒ don't act
|
|
64
|
-
return a.path === b.path && a.size === b.size && a.
|
|
74
|
+
return a.path === b.path && a.size === b.size && a.hash === b.hash;
|
|
65
75
|
}
|
|
66
76
|
/**
|
|
67
77
|
* Who, if anyone, will restart us. systemd exports INVOCATION_ID (and
|
package/dist/self-restart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-restart.js","sourceRoot":"","sources":["../src/self-restart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"self-restart.js","sourceRoot":"","sources":["../src/self-restart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What is actually wrong with a configured server URL.
|
|
3
|
+
*
|
|
4
|
+
* THE FAILURE THIS EXISTS TO END. `doctor` used to do:
|
|
5
|
+
*
|
|
6
|
+
* fetch(`${base}/api/capabilities`).then((r) => r.json())
|
|
7
|
+
*
|
|
8
|
+
* with no `r.ok` check, inside one try/catch. A host that had been renamed
|
|
9
|
+
* away served an HTML 404 page, `.json()` choked on `<!DO`, and the user was
|
|
10
|
+
* told:
|
|
11
|
+
*
|
|
12
|
+
* ✗ Server reachable unreachable: Unexpected non-whitespace character
|
|
13
|
+
* after JSON at position 4
|
|
14
|
+
*
|
|
15
|
+
* Three different problems with three different fixes — a stale token, a moved
|
|
16
|
+
* server, a server that is down — all arrived as that one sentence. And the
|
|
17
|
+
* "Logged in" row above it printed a green tick, because it only checked that
|
|
18
|
+
* credentials.json had an entry.
|
|
19
|
+
*
|
|
20
|
+
* So: classify, then advise. Every branch names the URL and the command that
|
|
21
|
+
* fixes it.
|
|
22
|
+
*/
|
|
23
|
+
export type ProbeResult =
|
|
24
|
+
/** Spoke to a chat-recall server and understood the answer. */
|
|
25
|
+
{
|
|
26
|
+
kind: 'ok';
|
|
27
|
+
apiVersion: number;
|
|
28
|
+
edition?: string;
|
|
29
|
+
cliVersion?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Reached an HTTP server, but nothing is mounted here. Usually a moved host. */
|
|
32
|
+
| {
|
|
33
|
+
kind: 'moved';
|
|
34
|
+
status: number;
|
|
35
|
+
}
|
|
36
|
+
/** The server is there and refused the credential. */
|
|
37
|
+
| {
|
|
38
|
+
kind: 'unauthorized';
|
|
39
|
+
status: number;
|
|
40
|
+
}
|
|
41
|
+
/** The server is there and broken. */
|
|
42
|
+
| {
|
|
43
|
+
kind: 'server_error';
|
|
44
|
+
status: number;
|
|
45
|
+
}
|
|
46
|
+
/** 2xx, but not a chat-recall API — a proxy, a captive portal, a parked domain. */
|
|
47
|
+
| {
|
|
48
|
+
kind: 'not_api';
|
|
49
|
+
status: number;
|
|
50
|
+
snippet: string;
|
|
51
|
+
}
|
|
52
|
+
/** Never got an HTTP response at all: DNS, TLS, connection, timeout. */
|
|
53
|
+
| {
|
|
54
|
+
kind: 'unreachable';
|
|
55
|
+
error: string;
|
|
56
|
+
};
|
|
57
|
+
/** True when the probe proves a usable chat-recall server. */
|
|
58
|
+
export declare function probeOk(r: ProbeResult): r is Extract<ProbeResult, {
|
|
59
|
+
kind: 'ok';
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Probe `<base>/api/capabilities`, which is unauthenticated and cheap.
|
|
63
|
+
*
|
|
64
|
+
* `fetchImpl` is injectable so the classification is testable without a server —
|
|
65
|
+
* the whole point of this module is behaviour on responses that are hard to
|
|
66
|
+
* produce on demand (an HTML 404, a parked domain, a 502).
|
|
67
|
+
*/
|
|
68
|
+
export declare function probeServer(base: string, opts?: {
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
fetchImpl?: typeof fetch;
|
|
71
|
+
}): Promise<ProbeResult>;
|
|
72
|
+
/**
|
|
73
|
+
* One line the user can act on. Never a stack trace, always the next command.
|
|
74
|
+
*/
|
|
75
|
+
export declare function probeAdvice(r: ProbeResult, base: string): string;
|
|
76
|
+
//# sourceMappingURL=server-probe.d.ts.map
|
|
@@ -0,0 +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;GACtE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,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,CAqCtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBhE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What is actually wrong with a configured server URL.
|
|
3
|
+
*
|
|
4
|
+
* THE FAILURE THIS EXISTS TO END. `doctor` used to do:
|
|
5
|
+
*
|
|
6
|
+
* fetch(`${base}/api/capabilities`).then((r) => r.json())
|
|
7
|
+
*
|
|
8
|
+
* with no `r.ok` check, inside one try/catch. A host that had been renamed
|
|
9
|
+
* away served an HTML 404 page, `.json()` choked on `<!DO`, and the user was
|
|
10
|
+
* told:
|
|
11
|
+
*
|
|
12
|
+
* ✗ Server reachable unreachable: Unexpected non-whitespace character
|
|
13
|
+
* after JSON at position 4
|
|
14
|
+
*
|
|
15
|
+
* Three different problems with three different fixes — a stale token, a moved
|
|
16
|
+
* server, a server that is down — all arrived as that one sentence. And the
|
|
17
|
+
* "Logged in" row above it printed a green tick, because it only checked that
|
|
18
|
+
* credentials.json had an entry.
|
|
19
|
+
*
|
|
20
|
+
* So: classify, then advise. Every branch names the URL and the command that
|
|
21
|
+
* fixes it.
|
|
22
|
+
*/
|
|
23
|
+
/** True when the probe proves a usable chat-recall server. */
|
|
24
|
+
export function probeOk(r) {
|
|
25
|
+
return r.kind === 'ok' && r.apiVersion >= 2;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Probe `<base>/api/capabilities`, which is unauthenticated and cheap.
|
|
29
|
+
*
|
|
30
|
+
* `fetchImpl` is injectable so the classification is testable without a server —
|
|
31
|
+
* the whole point of this module is behaviour on responses that are hard to
|
|
32
|
+
* produce on demand (an HTML 404, a parked domain, a 502).
|
|
33
|
+
*/
|
|
34
|
+
export async function probeServer(base, opts = {}) {
|
|
35
|
+
const f = opts.fetchImpl || fetch;
|
|
36
|
+
let res;
|
|
37
|
+
try {
|
|
38
|
+
res = await f(`${base.replace(/\/+$/, '')}/api/capabilities`, {
|
|
39
|
+
signal: AbortSignal.timeout(opts.timeoutMs ?? 10_000),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return { kind: 'unreachable', error: err instanceof Error ? err.message : String(err) };
|
|
44
|
+
}
|
|
45
|
+
if (res.status === 401 || res.status === 403)
|
|
46
|
+
return { kind: 'unauthorized', status: res.status };
|
|
47
|
+
// 404 and 410 mean "this URL serves HTTP but not us". 404 is what a renamed
|
|
48
|
+
// host, a parked domain or a wrong path all produce.
|
|
49
|
+
if (res.status === 404 || res.status === 410)
|
|
50
|
+
return { kind: 'moved', status: res.status };
|
|
51
|
+
if (res.status >= 500)
|
|
52
|
+
return { kind: 'server_error', status: res.status };
|
|
53
|
+
if (!res.ok)
|
|
54
|
+
return { kind: 'moved', status: res.status };
|
|
55
|
+
// 2xx. Read as TEXT first: .json() on an HTML body throws a parse error that
|
|
56
|
+
// says nothing about the actual problem, which is how this bug shipped.
|
|
57
|
+
let body;
|
|
58
|
+
try {
|
|
59
|
+
body = await res.text();
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return { kind: 'unreachable', error: err instanceof Error ? err.message : String(err) };
|
|
63
|
+
}
|
|
64
|
+
let parsed;
|
|
65
|
+
try {
|
|
66
|
+
parsed = JSON.parse(body);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return { kind: 'not_api', status: res.status, snippet: body.trim().slice(0, 60) };
|
|
70
|
+
}
|
|
71
|
+
if (typeof parsed?.apiVersion !== 'number') {
|
|
72
|
+
return { kind: 'not_api', status: res.status, snippet: body.trim().slice(0, 60) };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
kind: 'ok',
|
|
76
|
+
apiVersion: parsed.apiVersion,
|
|
77
|
+
edition: parsed.edition,
|
|
78
|
+
cliVersion: parsed.cli?.version,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* One line the user can act on. Never a stack trace, always the next command.
|
|
83
|
+
*/
|
|
84
|
+
export function probeAdvice(r, base) {
|
|
85
|
+
switch (r.kind) {
|
|
86
|
+
case 'ok':
|
|
87
|
+
return r.apiVersion >= 2
|
|
88
|
+
? `apiVersion ${r.apiVersion}${r.edition ? `, edition ${r.edition}` : ''}`
|
|
89
|
+
: `apiVersion ${r.apiVersion} is too old for this CLI — upgrade the server`;
|
|
90
|
+
case 'moved':
|
|
91
|
+
// The case that produced the parse error. Say what it means.
|
|
92
|
+
return `HTTP ${r.status} — nothing is served at ${base}. If the host moved, `
|
|
93
|
+
+ 're-point it: `chat-recall login <new-server-url>`';
|
|
94
|
+
case 'unauthorized':
|
|
95
|
+
return `HTTP ${r.status} — ${base} rejected the credential. Re-login: `
|
|
96
|
+
+ '`chat-recall login ' + base + '`';
|
|
97
|
+
case 'server_error':
|
|
98
|
+
return `HTTP ${r.status} — ${base} is up but failing. Nothing to fix locally; check the server.`;
|
|
99
|
+
case 'not_api':
|
|
100
|
+
return `${base} answered ${r.status} with something that is not the chat-recall API `
|
|
101
|
+
+ `(${JSON.stringify(r.snippet)}) — check the URL, a proxy or a captive portal`;
|
|
102
|
+
case 'unreachable':
|
|
103
|
+
return `no HTTP response from ${base} (${r.error}) — check the URL, DNS, or that the server is running`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=server-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-probe.js","sourceRoot":"","sources":["../src/server-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export declare function renderSystemdUnit(watchJs: string, node: string, logFile
|
|
|
17
17
|
/** Render the launchd plist body (pure — no FS, no exec). */
|
|
18
18
|
export declare function renderLaunchdPlist(watchJs: string, node: string, logFile: string, label?: string): string;
|
|
19
19
|
/** Render the schtasks /create command (pure — no exec). */
|
|
20
|
-
export declare function renderWindowsTaskCommand(watchJs: string, node: string, taskName?: string): string;
|
|
20
|
+
export declare function renderWindowsTaskCommand(watchJs: string, node: string, taskName?: string, logFile?: string): string;
|
|
21
21
|
/**
|
|
22
22
|
* Stop + remove the per-user background service. Idempotent — no error if
|
|
23
23
|
* the service isn't installed. Returns true if something was removed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-installer.d.ts","sourceRoot":"","sources":["../src/service-installer.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,0EAA0E;AAC1E,wBAAgB,gBAAgB,IAAI,OAAO,CAe1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAiB7C;AAsBD,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"service-installer.d.ts","sourceRoot":"","sources":["../src/service-installer.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,0EAA0E;AAC1E,wBAAgB,gBAAgB,IAAI,OAAO,CAe1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAiB7C;AAsBD,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBxF;AAmBD,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAA0B,GAAG,MAAM,CAa1H;AAuBD,4DAA4D;AAC5D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAsB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKhI;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAoB1C;AAED,kDAAkD;AAClD,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAI3C"}
|
|
@@ -102,9 +102,13 @@ export function renderSystemdUnit(watchJs, node, logFile) {
|
|
|
102
102
|
// largest transcripts.
|
|
103
103
|
`ExecStart=${node} --max-old-space-size=1536 ${watchJs}`,
|
|
104
104
|
'Restart=on-failure', 'RestartSec=10', 'Nice=10',
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
|
|
105
|
+
// JOURNAL, not append:. The file version had no rotation and nothing to
|
|
106
|
+
// give it any: systemd holds the fd open, so the daemon cannot rename or
|
|
107
|
+
// truncate its own log without leaving systemd writing into a hole. It
|
|
108
|
+
// reached 45 MB on this developer's machine and would have grown forever.
|
|
109
|
+
// journald already rotates and applies disk limits. Read it with
|
|
110
|
+
// journalctl --user -u chat-recall-watch -f
|
|
111
|
+
'StandardOutput=journal', 'StandardError=journal', '',
|
|
108
112
|
'[Install]', 'WantedBy=default.target', '',
|
|
109
113
|
].join('\n');
|
|
110
114
|
}
|
|
@@ -145,7 +149,15 @@ export function renderLaunchdPlist(watchJs, node, logFile, label = 'com.chat-rec
|
|
|
145
149
|
}
|
|
146
150
|
function installWindowsTask(watchJs, node, logFile) {
|
|
147
151
|
const taskName = 'chat-recall-watch';
|
|
148
|
-
|
|
152
|
+
// REDIRECT THE LOG. systemd gets StandardOutput=append: and launchd gets
|
|
153
|
+
// StandardOutPath, but the Scheduled Task had no redirection at all — so
|
|
154
|
+
// every diagnostic the daemon printed was discarded, while the CLI went on
|
|
155
|
+
// telling the user to read ~/.chat-recall/watch.log, a file that was never
|
|
156
|
+
// created. A crash-looping collector with no log is undiagnosable.
|
|
157
|
+
//
|
|
158
|
+
// schtasks /tr cannot express redirection itself, so wrap in cmd /c. The
|
|
159
|
+
// whole thing is one /tr argument, hence the escaped quotes.
|
|
160
|
+
const tr = `cmd /c \\"\\"${node}\\" --max-old-space-size=1536 \\"${watchJs}\\" >> \\"${logFile}\\" 2>&1\\"`;
|
|
149
161
|
try {
|
|
150
162
|
execSync(`schtasks /create /tn "${taskName}" /tr "${tr}" /sc onlogon /rl LIMITED /f`, { stdio: 'inherit' });
|
|
151
163
|
// Start now too (best-effort — starts next logon if /run unsupported).
|
|
@@ -160,8 +172,10 @@ function installWindowsTask(watchJs, node, logFile) {
|
|
|
160
172
|
return { definitionPath: null, logFile };
|
|
161
173
|
}
|
|
162
174
|
/** Render the schtasks /create command (pure — no exec). */
|
|
163
|
-
export function renderWindowsTaskCommand(watchJs, node, taskName = 'chat-recall-watch') {
|
|
164
|
-
const tr =
|
|
175
|
+
export function renderWindowsTaskCommand(watchJs, node, taskName = 'chat-recall-watch', logFile) {
|
|
176
|
+
const tr = logFile
|
|
177
|
+
? `cmd /c \\"\\"${node}\\" --max-old-space-size=1536 \\"${watchJs}\\" >> \\"${logFile}\\" 2>&1\\"`
|
|
178
|
+
: `\\"${node}\\" --max-old-space-size=1536 \\"${watchJs}\\"`;
|
|
165
179
|
return `schtasks /create /tn "${taskName}" /tr "${tr}" /sc onlogon /rl LIMITED /f`;
|
|
166
180
|
}
|
|
167
181
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-installer.js","sourceRoot":"","sources":["../src/service-installer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service-installer.js","sourceRoot":"","sources":["../src/service-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/sync-client.d.ts
CHANGED
|
@@ -108,6 +108,24 @@ export declare function batchScanExternal(items: Array<{
|
|
|
108
108
|
slices: number;
|
|
109
109
|
scanMs: number;
|
|
110
110
|
};
|
|
111
|
+
export declare function _resetCapsCacheForTests(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Learn the tenant-scoped ingest allowance from an authenticated response.
|
|
114
|
+
*
|
|
115
|
+
* `verifyServerApi` sets the same map from /api/capabilities, which is pre-auth
|
|
116
|
+
* and therefore can only report the CLASS ceiling. This overrides it with the
|
|
117
|
+
* number that actually applies to this tenant.
|
|
118
|
+
*/
|
|
119
|
+
export declare function setServerIngestConcurrency(serverUrl: string, n: number): void;
|
|
120
|
+
/** Does this server accept `Content-Encoding: gzip` on a request body? */
|
|
121
|
+
export declare function serverAcceptsGzipBody(serverUrl: string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* How many uploads may be in flight at once, according to the SERVER.
|
|
124
|
+
*
|
|
125
|
+
* Returns null when the server does not advertise it (older image) — the caller
|
|
126
|
+
* then keeps its own default.
|
|
127
|
+
*/
|
|
128
|
+
export declare function serverIngestConcurrency(serverUrl: string): number | null;
|
|
111
129
|
/**
|
|
112
130
|
* Build the live per-session conversation payload — the THIN-COLLECTOR core.
|
|
113
131
|
* Reads ONLY the raw transcript (via `parseTranscript` + `parseSessionFile`),
|
|
@@ -210,6 +228,13 @@ export declare function buildConversationTail(ref: SessionRef, fromOffset: numbe
|
|
|
210
228
|
newOffset: number;
|
|
211
229
|
findings: BuiltConversation['findings'];
|
|
212
230
|
} | null>;
|
|
231
|
+
/**
|
|
232
|
+
* Per-session derived payload: the four compute kinds the server's deep-dive
|
|
233
|
+
* routes read (diff/outcome/commits/markers) + the outcome-badge row. ALWAYS
|
|
234
|
+
* computed live from the transcript/git (no local compute/outcome cache is
|
|
235
|
+
* read or warmed — thin collector). Everything is deep-redacted — diffs carry
|
|
236
|
+
* file content.
|
|
237
|
+
*/
|
|
213
238
|
/**
|
|
214
239
|
* Incremental sync for the watch daemon and parameterless `chat-recall sync`:
|
|
215
240
|
* push only sessions modified after `settings.sync.lastSyncAt`, then advance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"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"}
|