chat-recall 0.5.16 → 0.5.18
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 +29 -4
- package/dist/cli.js +387 -48
- package/dist/cli.js.map +1 -1
- package/dist/mcp.js +761 -136
- package/dist/mcp.js.map +1 -1
- package/dist/open-browser.d.ts +7 -0
- package/dist/open-browser.d.ts.map +1 -0
- package/dist/open-browser.js +54 -0
- package/dist/open-browser.js.map +1 -0
- package/dist/scan-worker.js +8 -0
- package/dist/sync-client.d.ts +12 -0
- package/dist/sync-client.d.ts.map +1 -1
- package/dist/sync-client.js +66 -4
- package/dist/sync-client.js.map +1 -1
- package/dist/watch.js +181 -33
- package/package.json +1 -1
- package/skills/chat-recall/SKILL.md +12 -0
- package/skills/chat-recall-project/SKILL.md +11 -0
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,GACrF,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,+EAA+E;AAC/E,qCAAqC;AACrC,2EAA2E;AAC3E,gFAAgF;AAChF,wDAAwD;AACxD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CACzB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC,OAAO,CAAC,CAAC;AACX,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AACpC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC9B,eAAe,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true when a launcher was started — NOT that a browser appeared. There
|
|
3
|
+
* is no portable way to learn the second thing, and pretending otherwise would
|
|
4
|
+
* let a caller suppress the printed URL.
|
|
5
|
+
*/
|
|
6
|
+
export declare function openBrowser(url: string): boolean;
|
|
7
|
+
//# sourceMappingURL=open-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAsBhD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open a URL in the user's browser, and never care much whether it worked.
|
|
3
|
+
*
|
|
4
|
+
* Used for sign-in, which is why the caller ALWAYS prints the URL too. An MCP
|
|
5
|
+
* server or a CLI can be running over ssh, in a container, in CI, or on a
|
|
6
|
+
* headless box, and in every one of those there is no browser to open. A flow
|
|
7
|
+
* that depends on this succeeding is a flow that strands those users silently —
|
|
8
|
+
* so this is a convenience on top of a link, never the way the link is
|
|
9
|
+
* delivered.
|
|
10
|
+
*
|
|
11
|
+
* Detached and fully ignored: a browser launched as a child of a long-lived
|
|
12
|
+
* daemon would otherwise keep a pipe open and, on some desktops, die with the
|
|
13
|
+
* parent.
|
|
14
|
+
*/
|
|
15
|
+
import { spawn } from 'node:child_process';
|
|
16
|
+
/** Only ever hand the shell-free launchers an http(s) URL we built ourselves. */
|
|
17
|
+
function isSafeUrl(url) {
|
|
18
|
+
try {
|
|
19
|
+
const u = new URL(url);
|
|
20
|
+
return u.protocol === 'https:' || u.protocol === 'http:';
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns true when a launcher was started — NOT that a browser appeared. There
|
|
28
|
+
* is no portable way to learn the second thing, and pretending otherwise would
|
|
29
|
+
* let a caller suppress the printed URL.
|
|
30
|
+
*/
|
|
31
|
+
export function openBrowser(url) {
|
|
32
|
+
if (!isSafeUrl(url))
|
|
33
|
+
return false;
|
|
34
|
+
// Respect the convention a headless or scripted environment uses to say "do
|
|
35
|
+
// not launch anything", plus the usual CI markers.
|
|
36
|
+
if (process.env.CHAT_RECALL_NO_BROWSER === '1' || process.env.CI)
|
|
37
|
+
return false;
|
|
38
|
+
const [cmd, args] = process.platform === 'darwin' ? ['open', [url]]
|
|
39
|
+
: process.platform === 'win32'
|
|
40
|
+
// `start` is a cmd builtin; the empty title argument is required or a URL
|
|
41
|
+
// containing spaces is read as the window title.
|
|
42
|
+
? ['cmd', ['/c', 'start', '', url]]
|
|
43
|
+
: ['xdg-open', [url]];
|
|
44
|
+
try {
|
|
45
|
+
const child = spawn(cmd, args, { stdio: 'ignore', detached: true });
|
|
46
|
+
child.on('error', () => { });
|
|
47
|
+
child.unref();
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=open-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../src/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,iFAAiF;AACjF,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,4EAA4E;IAC5E,mDAAmD;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAE/E,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GACf,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,0EAA0E;YAC1E,iDAAiD;YACjD,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAuD,CAAC,CAAC,CAAC;QACjF,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/scan-worker.js
CHANGED
|
@@ -38,6 +38,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
mod
|
|
39
39
|
));
|
|
40
40
|
|
|
41
|
+
// ../engine/dist/core/project-path-match.js
|
|
42
|
+
var init_project_path_match = __esm({
|
|
43
|
+
"../engine/dist/core/project-path-match.js"() {
|
|
44
|
+
"use strict";
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
41
48
|
// ../../node_modules/pino-std-serializers/lib/err-helpers.js
|
|
42
49
|
var require_err_helpers = __commonJS({
|
|
43
50
|
"../../node_modules/pino-std-serializers/lib/err-helpers.js"(exports, module) {
|
|
@@ -4775,6 +4782,7 @@ var CLI_DETECTION_ORDER, SCHEMA_VERSION, PERSONAL_DIR_NAMES, PERSONAL_DIR_PATTER
|
|
|
4775
4782
|
var init_settings = __esm({
|
|
4776
4783
|
"../engine/dist/core/settings.js"() {
|
|
4777
4784
|
"use strict";
|
|
4785
|
+
init_project_path_match();
|
|
4778
4786
|
init_paths();
|
|
4779
4787
|
CLI_DETECTION_ORDER = [
|
|
4780
4788
|
{ preset: "gemini", bin: "gemini", cmd: 'gemini -p " "' },
|
package/dist/sync-client.d.ts
CHANGED
|
@@ -14,6 +14,17 @@ export interface Credentials {
|
|
|
14
14
|
export declare function saveCredentials(c: Credentials): void;
|
|
15
15
|
export declare function loadAllCredentials(): Credentials[];
|
|
16
16
|
export declare function _resetTenantSecurityConfigCache(): void;
|
|
17
|
+
interface TenantSyncConfig {
|
|
18
|
+
excludeTools: string[];
|
|
19
|
+
excludeProjects: string[];
|
|
20
|
+
excludeSources: string[];
|
|
21
|
+
approveSources: string[];
|
|
22
|
+
}
|
|
23
|
+
declare function fetchTenantSyncConfig(cred: Credentials): Promise<TenantSyncConfig>;
|
|
24
|
+
/** Test seam. The function itself is internal — one caller, inside the sync —
|
|
25
|
+
* but the three failure outcomes it now distinguishes are exactly what has to
|
|
26
|
+
* be pinned, and reaching them through a full sync would need a server. */
|
|
27
|
+
export declare const _fetchTenantSyncConfigForTests: typeof fetchTenantSyncConfig;
|
|
17
28
|
export declare function _resetTenantSyncConfigCache(): void;
|
|
18
29
|
/** Legacy single-target accessor — first target. */
|
|
19
30
|
/** The ACTIVE target = most recent login (saveCredentials unshifts). */
|
|
@@ -256,4 +267,5 @@ export declare function isSyncSkip(r: SyncResult | SyncSkip): r is SyncSkip;
|
|
|
256
267
|
export declare function syncIncremental(opts?: {
|
|
257
268
|
scope?: 'full' | 'changed';
|
|
258
269
|
}): Promise<SyncResult | SyncSkip>;
|
|
270
|
+
export {};
|
|
259
271
|
//# sourceMappingURL=sync-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAoF,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAWrL,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAoF,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAWrL,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,0CAA0C,CAAC;AA4ExG,OAAO,4CAA4C,CAAC;AAMpD,MAAM,WAAW,WAAW;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE;AAElE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAoBpD;AAED,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAelD;AAwGD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAuBD,UAAU,gBAAgB;IAAG,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE;AAkCpI,iBAAe,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoEjF;AAED;;4EAE4E;AAC5E,eAAO,MAAM,8BAA8B,8BAAwB,CAAC;AA4BpE,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,oDAAoD;AACpD,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAM5D;AAMD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB;AAyBD,wBAAsB,YAAY,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CA2FvN;AAED,MAAM,WAAW,eAAe;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AA+ErK;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAc9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAiB,EAAE,QAAQ,SAAe,EAAE,GAAG,SAAa,GAAG,MAAM,CAc3G;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EACvD,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,cAAc,EAAE,CAAC;CAClE,GACL;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwD3F;AAgBD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7E;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AA2kCD;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB;qGACiG;IACjG,QAAQ,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACpI,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf;;;qFAGiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;0EAE0E;AAC1E,MAAM,WAAW,qBAAqB;IAAG,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAE5E;;;;+EAI+E;AAC/E,eAAO,MAAM,oBAAoB,QAC2D,CAAC;AAI7F;;;;;gEAKgE;AAChE,eAAO,MAAM,oBAAoB,QAC0D,CAAC;AAE5F,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzL;;kFAE8E;IAC9E,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC;;;;0EAIsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,iBAAiB,GAAG,qBAAqB,GAAG,IAAI,CAAC,CAyW3D;AAgBD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAO,GACnG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAkEnI;AAED;;;;;;GAMG;AACH;;;;;;;;GAQG;AACH;;;;yCAIyC;AACzC,MAAM,WAAW,QAAQ;IAAG,OAAO,EAAE,gBAAgB,GAAG,QAAQ,GAAG,WAAW,CAAA;CAAE;AAEhF,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAElE;AAED,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,CA4C/G"}
|
package/dist/sync-client.js
CHANGED
|
@@ -66,6 +66,7 @@ catch {
|
|
|
66
66
|
}
|
|
67
67
|
import { parseSessionFile, readCwdFromJsonl } from '@chat-recall/engine/parsers/session.js';
|
|
68
68
|
import { resolveProjectId } from '@chat-recall/engine/core/project-resolver.js';
|
|
69
|
+
import { projectPathIncludes } from '@chat-recall/engine/core/project-path-match.js';
|
|
69
70
|
import { extractEntities } from '@chat-recall/engine/core/entity-extractor.js';
|
|
70
71
|
import { buildSourceRegistry } from '@chat-recall/engine/parsers/all-sources.js';
|
|
71
72
|
import { getSyncedRows, markSynced, getLedgerData, persistLedgerData, fieldNeedsScan, markFieldCoverage, fieldNeedsFullPass, markFieldFullPassDone, syncMode, markFullResync, loadItemVersions, saveItemVersions, flushLedger, pruneLedgerTargets } from './sync-ledger.js';
|
|
@@ -269,6 +270,33 @@ export function _resetTenantSecurityConfigCache() {
|
|
|
269
270
|
_securityConfigCache.clear();
|
|
270
271
|
}
|
|
271
272
|
const _syncConfigCache = new Map();
|
|
273
|
+
const EMPTY_SYNC_CONFIG = { excludeTools: [], excludeProjects: [], excludeSources: [], approveSources: [] };
|
|
274
|
+
/** Where the last successfully fetched rule set is kept, per server. A CLI
|
|
275
|
+
* invocation is a new process, so an in-memory cache alone would leave the
|
|
276
|
+
* common case (one `chat-recall sync` per tick) with nothing to fall back to. */
|
|
277
|
+
function syncConfigCachePath() {
|
|
278
|
+
return join(getDataDir(), 'sync-config-cache.json');
|
|
279
|
+
}
|
|
280
|
+
function readPersistedSyncConfigs() {
|
|
281
|
+
try {
|
|
282
|
+
return JSON.parse(readFileSync(syncConfigCachePath(), 'utf-8'));
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return {};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function persistSyncConfig(base, config) {
|
|
289
|
+
try {
|
|
290
|
+
const all = readPersistedSyncConfigs();
|
|
291
|
+
all[base] = { fetchedAt: Date.now(), config };
|
|
292
|
+
mkdirSync(dirname(syncConfigCachePath()), { recursive: true });
|
|
293
|
+
writeFileSync(syncConfigCachePath(), JSON.stringify(all, null, 2));
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// A cache we cannot write is a degraded fallback, not a failed sync. The
|
|
297
|
+
// in-memory copy still serves this process.
|
|
298
|
+
}
|
|
299
|
+
}
|
|
272
300
|
async function fetchTenantSyncConfig(cred) {
|
|
273
301
|
const base = cred.serverUrl.replace(/\/+$/, '');
|
|
274
302
|
const cached = _syncConfigCache.get(base);
|
|
@@ -292,8 +320,13 @@ async function fetchTenantSyncConfig(cred) {
|
|
|
292
320
|
}
|
|
293
321
|
catch { /* reporting is advisory — never block a sync on it */ }
|
|
294
322
|
const res = await fetchWithTimeout(`${base}/api/sync-config`, { headers });
|
|
323
|
+
if (res.status === 404) {
|
|
324
|
+
// No endpoint on this server — a real answer, not an outage.
|
|
325
|
+
_syncConfigCache.set(base, { fetchedAt: Date.now(), config: EMPTY_SYNC_CONFIG });
|
|
326
|
+
return EMPTY_SYNC_CONFIG;
|
|
327
|
+
}
|
|
295
328
|
if (!res.ok)
|
|
296
|
-
return
|
|
329
|
+
return lastKnownSyncConfig(base, `HTTP ${res.status}`);
|
|
297
330
|
const body = await res.json().catch(() => ({}));
|
|
298
331
|
const config = {
|
|
299
332
|
excludeTools: Array.isArray(body.excludeTools) ? body.excludeTools.filter((t) => typeof t === 'string') : [],
|
|
@@ -334,11 +367,34 @@ async function fetchTenantSyncConfig(cred) {
|
|
|
334
367
|
}
|
|
335
368
|
catch { /* advisory — a failure must not stop the sync */ }
|
|
336
369
|
_syncConfigCache.set(base, { fetchedAt: Date.now(), config });
|
|
370
|
+
persistSyncConfig(base, config);
|
|
337
371
|
return config;
|
|
338
372
|
}
|
|
339
|
-
catch {
|
|
340
|
-
return
|
|
373
|
+
catch (err) {
|
|
374
|
+
return lastKnownSyncConfig(base, err instanceof Error ? err.message : 'request failed');
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/** Test seam. The function itself is internal — one caller, inside the sync —
|
|
378
|
+
* but the three failure outcomes it now distinguishes are exactly what has to
|
|
379
|
+
* be pinned, and reaching them through a full sync would need a server. */
|
|
380
|
+
export const _fetchTenantSyncConfigForTests = fetchTenantSyncConfig;
|
|
381
|
+
/**
|
|
382
|
+
* The last rule set we successfully fetched for this server, or a refusal.
|
|
383
|
+
*
|
|
384
|
+
* Called only when the fetch failed in a way that is NOT "this server has no
|
|
385
|
+
* such endpoint". Reuse is stale but honest; an empty set is a lie that uploads
|
|
386
|
+
* data. With nothing to reuse we throw, which aborts this sync and leaves the
|
|
387
|
+
* ledger untouched, so the next run retries from the same place.
|
|
388
|
+
*/
|
|
389
|
+
function lastKnownSyncConfig(base, reason) {
|
|
390
|
+
const remembered = _syncConfigCache.get(base) ?? readPersistedSyncConfigs()[base];
|
|
391
|
+
if (remembered) {
|
|
392
|
+
console.error(`[sync] could not read server-side sync rules (${reason}) — applying the last known set from ${new Date(remembered.fetchedAt).toISOString()}`);
|
|
393
|
+
return remembered.config;
|
|
341
394
|
}
|
|
395
|
+
throw new Error(`Cannot read the server-side sync rules from ${base} (${reason}), and this machine has never `
|
|
396
|
+
+ 'successfully read them. Refusing to sync: uploading without knowing your exclusions could '
|
|
397
|
+
+ 'ship a project you told the dashboard to hold back. Fix the server or retry.');
|
|
342
398
|
}
|
|
343
399
|
/** Stable-ish machine label for the dashboard's per-device grouping. */
|
|
344
400
|
function deviceLabel() {
|
|
@@ -810,7 +866,13 @@ async function syncToTargetInScope(cred, opts = {}) {
|
|
|
810
866
|
// (sync.pathsCleartext — what the watch daemon uses).
|
|
811
867
|
const cleartext = opts.cleartextPaths ?? sync?.pathsCleartext === true;
|
|
812
868
|
const mapPath = (p) => (cleartext ? p : hashPath(p));
|
|
813
|
-
|
|
869
|
+
// projectPathIncludes, not String.includes. `listSessions()` decodes the
|
|
870
|
+
// project path from Claude Code's directory name, which replaced every
|
|
871
|
+
// separator with '-' and cannot be inverted — so an `exclude project
|
|
872
|
+
// ~/code/chat-recall` rule was compared against `/home/user/code/chat/recall`
|
|
873
|
+
// and never matched. The project kept syncing with the rule sitting there
|
|
874
|
+
// looking applied. See engine/core/project-path-match.ts.
|
|
875
|
+
const excluded = (projectPath) => excludeProjects.some((x) => projectPathIncludes(projectPath, x));
|
|
814
876
|
// Opt-in selective sync (settings.sync.syncMode='only'): ship ONLY allowlisted
|
|
815
877
|
// projects. Allowlist = local ∪ tenant config; matched on the resolved project
|
|
816
878
|
// id (what the dashboard picker lists) or a path substring. 'all'/unset ships
|