@0xmaxma/claude-gateway 1.7.8 → 1.7.10
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 +11 -3
- package/dist/agent/dreaming/accept.d.ts.map +1 -1
- package/dist/agent/dreaming/accept.js +4 -1
- package/dist/agent/dreaming/accept.js.map +1 -1
- package/dist/agent/dreaming/config.d.ts.map +1 -1
- package/dist/agent/dreaming/config.js +2 -0
- package/dist/agent/dreaming/config.js.map +1 -1
- package/dist/agent/dreaming/reviewer.d.ts.map +1 -1
- package/dist/agent/dreaming/reviewer.js +9 -2
- package/dist/agent/dreaming/reviewer.js.map +1 -1
- package/dist/agent/dreaming/staleness.d.ts +7 -1
- package/dist/agent/dreaming/staleness.d.ts.map +1 -1
- package/dist/agent/dreaming/staleness.js +17 -2
- package/dist/agent/dreaming/staleness.js.map +1 -1
- package/dist/agent/dreaming/types.d.ts +17 -1
- package/dist/agent/dreaming/types.d.ts.map +1 -1
- package/dist/agent/knowledge/archive-db.d.ts +43 -0
- package/dist/agent/knowledge/archive-db.d.ts.map +1 -1
- package/dist/agent/knowledge/archive-db.js +130 -0
- package/dist/agent/knowledge/archive-db.js.map +1 -1
- package/dist/agent/knowledge/config.d.ts +3 -1
- package/dist/agent/knowledge/config.d.ts.map +1 -1
- package/dist/agent/knowledge/config.js +30 -1
- package/dist/agent/knowledge/config.js.map +1 -1
- package/dist/agent/knowledge/index.d.ts +11 -4
- package/dist/agent/knowledge/index.d.ts.map +1 -1
- package/dist/agent/knowledge/index.js +22 -1
- package/dist/agent/knowledge/index.js.map +1 -1
- package/dist/agent/knowledge/indexer.d.ts +0 -7
- package/dist/agent/knowledge/indexer.d.ts.map +1 -1
- package/dist/agent/knowledge/indexer.js +34 -7
- package/dist/agent/knowledge/indexer.js.map +1 -1
- package/dist/agent/knowledge/lifecycle.d.ts +20 -4
- package/dist/agent/knowledge/lifecycle.d.ts.map +1 -1
- package/dist/agent/knowledge/lifecycle.js +33 -4
- package/dist/agent/knowledge/lifecycle.js.map +1 -1
- package/dist/agent/knowledge/reflection.d.ts +114 -0
- package/dist/agent/knowledge/reflection.d.ts.map +1 -0
- package/dist/agent/knowledge/reflection.js +447 -0
- package/dist/agent/knowledge/reflection.js.map +1 -0
- package/dist/agent/knowledge/shared-dedup.d.ts +85 -0
- package/dist/agent/knowledge/shared-dedup.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-dedup.js +187 -0
- package/dist/agent/knowledge/shared-dedup.js.map +1 -0
- package/dist/agent/knowledge/shared-promote.d.ts +82 -7
- package/dist/agent/knowledge/shared-promote.d.ts.map +1 -1
- package/dist/agent/knowledge/shared-promote.js +244 -11
- package/dist/agent/knowledge/shared-promote.js.map +1 -1
- package/dist/agent/knowledge/shared-staleness.d.ts +51 -0
- package/dist/agent/knowledge/shared-staleness.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-staleness.js +149 -0
- package/dist/agent/knowledge/shared-staleness.js.map +1 -0
- package/dist/agent/knowledge/shared-writer.d.ts +19 -0
- package/dist/agent/knowledge/shared-writer.d.ts.map +1 -1
- package/dist/agent/knowledge/shared-writer.js +42 -0
- package/dist/agent/knowledge/shared-writer.js.map +1 -1
- package/dist/agent/knowledge/types.d.ts +24 -0
- package/dist/agent/knowledge/types.d.ts.map +1 -1
- package/dist/agent/runner.d.ts +7 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +106 -16
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/workspace-loader.d.ts +17 -2
- package/dist/agent/workspace-loader.d.ts.map +1 -1
- package/dist/agent/workspace-loader.js +17 -1
- package/dist/agent/workspace-loader.js.map +1 -1
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +2 -1
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/line-webhook-router.d.ts.map +1 -1
- package/dist/api/line-webhook-router.js +7 -15
- package/dist/api/line-webhook-router.js.map +1 -1
- package/dist/api/slack-client.d.ts +25 -2
- package/dist/api/slack-client.d.ts.map +1 -1
- package/dist/api/slack-client.js +102 -0
- package/dist/api/slack-client.js.map +1 -1
- package/dist/api/slack-webhook-router.d.ts +15 -1
- package/dist/api/slack-webhook-router.d.ts.map +1 -1
- package/dist/api/slack-webhook-router.js +128 -1
- package/dist/api/slack-webhook-router.js.map +1 -1
- package/dist/apps/compose-generator.js +7 -4
- package/dist/apps/compose-generator.js.map +1 -1
- package/dist/apps/installer.d.ts +86 -0
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +440 -52
- package/dist/apps/installer.js.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/session/compactor.d.ts +32 -2
- package/dist/session/compactor.d.ts.map +1 -1
- package/dist/session/compactor.js +134 -19
- package/dist/session/compactor.js.map +1 -1
- package/dist/session/process.d.ts +20 -3
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +120 -5
- package/dist/session/process.js.map +1 -1
- package/dist/shared/image-sniff.d.ts +15 -0
- package/dist/shared/image-sniff.d.ts.map +1 -0
- package/dist/shared/image-sniff.js +29 -0
- package/dist/shared/image-sniff.js.map +1 -0
- package/dist/shell/claude-pty-shell.js +146 -27
- package/dist/shell/claude-pty-shell.js.map +1 -1
- package/dist/shell/draft-phantom.d.ts +49 -0
- package/dist/shell/draft-phantom.d.ts.map +1 -0
- package/dist/shell/draft-phantom.js +59 -0
- package/dist/shell/draft-phantom.js.map +1 -0
- package/dist/shell/submit-diag.d.ts +67 -0
- package/dist/shell/submit-diag.d.ts.map +1 -0
- package/dist/shell/submit-diag.js +69 -0
- package/dist/shell/submit-diag.js.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/mcp/tools/discord/module.ts +24 -17
- package/mcp/tools/memory/archive-reader.test.ts +25 -1
- package/mcp/tools/memory/archive-reader.ts +70 -12
- package/mcp/tools/memory/archive-writer.test.ts +168 -0
- package/mcp/tools/memory/archive-writer.ts +137 -0
- package/mcp/tools/memory/module.test.ts +187 -0
- package/mcp/tools/memory/module.ts +192 -6
- package/mcp/tools/shared/limits.ts +14 -0
- package/mcp/tools/slack/module.ts +66 -4
- package/mcp/tools/telegram/module.ts +11 -3
- package/mcp/tools/telegram/receiver-server.ts +10 -3
- package/mcp/tools/telegram/typing.ts +178 -34
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-diag.d.ts","sourceRoot":"","sources":["../../src/shell/submit-diag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;iEAEiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB;;mFAE+E;IAC/E,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;yEAYyE;AACzE,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,CAAC;AAEjF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,CAIvF;AAED;;;;;;;yCAOyC;AACzC,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB5E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Diagnostics for the swallowed-Enter submit-retry path (#370).
|
|
4
|
+
*
|
|
5
|
+
* A turn intermittently fails with "failed to submit turn to the TUI input" for
|
|
6
|
+
* two indistinguishable reasons in today's logs:
|
|
7
|
+
* (1) the Enter was genuinely swallowed — the draft is still sitting in the
|
|
8
|
+
* input box at give-up (`draftLen > 0`), or
|
|
9
|
+
* (2) a busy-marker-drift false-positive — newer Claude Code renders a random
|
|
10
|
+
* gerund spinner instead of the "esc to interrupt" marker, so the
|
|
11
|
+
* give-up branch trips even though Claude is working (draft empty, records
|
|
12
|
+
* appear right after — surfaced by the paired `recovered` event).
|
|
13
|
+
*
|
|
14
|
+
* These pure helpers build one prod-safe structured snapshot per retry/give-up/
|
|
15
|
+
* recovery. Extracted from claude-pty-shell.ts so they are unit-testable without
|
|
16
|
+
* importing that module (which starts the driver on load).
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.shortHash = shortHash;
|
|
20
|
+
exports.classifyLikelyCause = classifyLikelyCause;
|
|
21
|
+
exports.buildSubmitDiag = buildSubmitDiag;
|
|
22
|
+
/** Stable 32-bit FNV-1a hash of a string, hex. Used only to correlate the input
|
|
23
|
+
* draft across submit-retry snapshots (an unchanged hash ⇒ a genuinely stuck,
|
|
24
|
+
* unsubmitted draft) WITHOUT ever logging the raw user text. */
|
|
25
|
+
function shortHash(s) {
|
|
26
|
+
let h = 0x811c9dc5;
|
|
27
|
+
for (let i = 0; i < s.length; i++) {
|
|
28
|
+
h ^= s.charCodeAt(i);
|
|
29
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
30
|
+
}
|
|
31
|
+
return h.toString(16).padStart(8, '0');
|
|
32
|
+
}
|
|
33
|
+
function classifyLikelyCause(draftLen, recordsDelta) {
|
|
34
|
+
if (draftLen > 0)
|
|
35
|
+
return 'cause1-swallowed';
|
|
36
|
+
if (recordsDelta > 0)
|
|
37
|
+
return 'cause2-marker-drift';
|
|
38
|
+
return 'unknown';
|
|
39
|
+
}
|
|
40
|
+
/** Build the prod-safe, structured diagnostic snapshot for the swallowed-Enter
|
|
41
|
+
* submit-retry path. Pure: the raw draft is reduced to `draftLen` + `draftHash`
|
|
42
|
+
* here and NEVER passed through verbatim, so no user text, token, or secret can
|
|
43
|
+
* reach the logs. `event` distinguishes an Enter-retry, the final give-up
|
|
44
|
+
* (cause 1 proof: non-empty draft still on screen), and a later successful
|
|
45
|
+
* completion (`recovered` — cause 2 proof: the Enter was not actually
|
|
46
|
+
* swallowed). `likelyCause` is a reading aid derived from the raw fields; those
|
|
47
|
+
* fields remain the source of truth. */
|
|
48
|
+
function buildSubmitDiag(i) {
|
|
49
|
+
return {
|
|
50
|
+
event: i.event,
|
|
51
|
+
likelyCause: classifyLikelyCause(i.draft.length, i.recordsDelta),
|
|
52
|
+
enterRetries: i.enterRetries,
|
|
53
|
+
sawBusy: i.sawBusy,
|
|
54
|
+
sawBusyMarker: i.sawBusyMarker,
|
|
55
|
+
sawAssistant: i.sawAssistant,
|
|
56
|
+
recordsDelta: i.recordsDelta,
|
|
57
|
+
draftLen: i.draft.length,
|
|
58
|
+
draftHash: i.draft.length > 0 ? shortHash(i.draft) : null,
|
|
59
|
+
quietMs: i.quietMs,
|
|
60
|
+
msSinceSubmit: i.msSinceSubmit,
|
|
61
|
+
msSinceStart: i.msSinceStart,
|
|
62
|
+
msSinceFirstRecord: i.msSinceFirstRecord,
|
|
63
|
+
hasPrompt: i.hasPrompt,
|
|
64
|
+
dialog: i.dialog,
|
|
65
|
+
fromMenuSelection: i.fromMenuSelection,
|
|
66
|
+
probeRounds: i.probeRounds,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=submit-diag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-diag.js","sourceRoot":"","sources":["../../src/shell/submit-diag.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAKH,8BAOC;AAwCD,kDAIC;AAUD,0CAoBC;AApFD;;iEAEiE;AACjE,SAAgB,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAwCD,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,YAAoB;IACxE,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC5C,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACnD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;yCAOyC;AACzC,SAAgB,eAAe,CAAC,CAAmB;IACjD,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC;QAChE,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;QACxB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QACzD,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -370,6 +370,31 @@ export interface GatewayConfig {
|
|
|
370
370
|
root?: string;
|
|
371
371
|
mode?: 'propose' | 'auto';
|
|
372
372
|
graph?: boolean;
|
|
373
|
+
/** issue #392 part D: shared-KB staleness GC (same shape as dreaming.staleness above). */
|
|
374
|
+
staleness?: {
|
|
375
|
+
enabled?: boolean;
|
|
376
|
+
staleTtlDays?: number;
|
|
377
|
+
keepImportance?: number;
|
|
378
|
+
minRetrievalKeep?: number;
|
|
379
|
+
supersession?: boolean;
|
|
380
|
+
recordRetrievals?: boolean;
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
/**
|
|
384
|
+
* Weekly, KB-level shared reflection pass (issue #392 part C). Runs once
|
|
385
|
+
* per distinct shared-vault root (not per agent), skips entirely when the
|
|
386
|
+
* vault hasn't changed since the last run, and clusters related notes
|
|
387
|
+
* (connected components over the wikilink graph) before proposing at most
|
|
388
|
+
* `maxClustersPerRun` bounded merges.
|
|
389
|
+
*/
|
|
390
|
+
reflection?: {
|
|
391
|
+
enabled?: boolean;
|
|
392
|
+
dayOfWeek?: number;
|
|
393
|
+
hour?: number;
|
|
394
|
+
minute?: number;
|
|
395
|
+
timezone?: string;
|
|
396
|
+
maxClustersPerRun?: number;
|
|
397
|
+
reviewModel?: string;
|
|
373
398
|
};
|
|
374
399
|
};
|
|
375
400
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAIvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB;;;;;;WAMG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,iEAAiE;QACjE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,6EAA6E;QAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAC7C,wFAAwF;QACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB;;;;;;WAMG;QACH,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAChD;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B;;;;WAIG;QACH,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB;;;;;;;;;WASG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,+FAA+F;QAC/F,QAAQ,EAAE,MAAM,CAAC;QACjB,+FAA+F;QAC/F,aAAa,EAAE,MAAM,CAAC;QACtB;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAC7C,yGAAyG;QACzG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB;;;;WAIG;QACH,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;QAChD,2GAA2G;QAC3G,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B;;;;;WAKG;QACH,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,8FAA8F;QAC9F,0BAA0B,CAAC,EAAE,OAAO,CAAC;QACrC,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,gCAAgC;IAChC,SAAS,CAAC,EAAE;QACV,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;IAC1D,sFAAsF;IACtF,MAAM,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5C,iFAAiF;IACjF,QAAQ,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;IAChD,0FAA0F;IAC1F,SAAS,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;IAClD,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB;;;;;;WAMG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;;;;;;;;;WAUG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;QACvB,GAAG,CAAC,EAAE;YACJ,IAAI,EAAE,MAAM,EAAE,CAAC;SAChB,CAAC;QACF;;;WAGG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;;;;;;WASG;QACH,WAAW,CAAC,EAAE;YACZ,WAAW,CAAC,EAAE,OAAO,CAAC;SACvB,CAAC;QACF,gDAAgD;QAChD,OAAO,CAAC,EAAE,aAAa,GAAG;YACxB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,eAAe,CAAC,EAAE,MAAM,CAAC;SAC1B,CAAC;QACF;;;;;;;;;;WAUG;QACH,eAAe,CAAC,EAAE;YAChB,sFAAsF;YACtF,eAAe,CAAC,EAAE,OAAO,CAAC;YAC1B,uJAAuJ;YACvJ,qBAAqB,CAAC,EAAE,MAAM,CAAC;YAC/B,iGAAiG;YACjG,kBAAkB,CAAC,EAAE,OAAO,CAAC;SAC9B,CAAC;QACF;;;;;;;WAOG;QACH,SAAS,CAAC,EAAE;YACV,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,yBAAyB,CAAC,EAAE,OAAO,CAAC;YACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;SAClC,CAAC;QACF;;;;;;;;WAQG;QACH,aAAa,CAAC,EAAE;YACd,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;YAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,MAAM,CAAC,EAAE,OAAO,CAAC;SAClB,CAAC;QACF;;;;;;;WAOG;QACH,MAAM,CAAC,EAAE;YACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;YAI9B,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC;QACF;;;;;;;WAOG;QACH,QAAQ,CAAC,EAAE;YACT,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;YAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;YAIxB,YAAY,CAAC,EAAE,OAAO,CAAC;YAIvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;YAC9B;;;;;;;;;eASG;YACH,SAAS,CAAC,EAAE;gBACV,OAAO,CAAC,EAAE,OAAO,CAAC;gBAClB,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;gBACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;aAC5B,CAAC;SACH,CAAC;QACF;;;;;;;WAOG;QACH,SAAS,CAAC,EAAE;YACV,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,EAAE,OAAO,CAAC;gBAClB,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,YAAY,CAAC,EAAE,MAAM,CAAC;aACvB,CAAC;YACF;;;;;;eAMG;YACH,MAAM,CAAC,EAAE;gBACP,OAAO,CAAC,EAAE,OAAO,CAAC;gBAClB,OAAO,CAAC,EAAE,MAAM,CAAC;gBACjB,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;gBAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;aACjB,CAAC;SACH,CAAC;KACH,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAElB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,UAAU,EAAE,aAAa,CAAC;CAClD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;oFAEgF;IAChF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAID,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAC;AAC7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,7 @@ import { createMessageHandler } from './inbound';
|
|
|
30
30
|
// the others see the O_EXCL marker and drop, so a stranger's DM is handled once.
|
|
31
31
|
import { initDedupDir, isDuplicate, pruneDedup } from '../telegram/dedup';
|
|
32
32
|
import type { DiscordMessageContext } from './types';
|
|
33
|
-
|
|
34
|
-
const MAX_ATTACHMENT_BYTES = 50 * 1024 * 1024;
|
|
33
|
+
import { MAX_ATTACHMENT_BYTES } from '../shared/limits';
|
|
35
34
|
|
|
36
35
|
/** AgentRunner callback base (origin of CLAUDE_CHANNEL_CALLBACK, "" when unset).
|
|
37
36
|
* Used to mint/approve `/cli` pairings via the runner, the same bridge the
|
|
@@ -587,29 +586,37 @@ export class DiscordModule implements ChannelModule {
|
|
|
587
586
|
if (!file.endsWith('.forward')) continue;
|
|
588
587
|
const filePath = path.join(typingDir, file);
|
|
589
588
|
const channelId = file.slice(0, -'.forward'.length);
|
|
590
|
-
|
|
591
|
-
|
|
589
|
+
// AgentRunner.writeAutoForward() appends to a queue rather than
|
|
590
|
+
// overwriting (claude-gateway#380), so this file is a JSON array of
|
|
591
|
+
// { text, format, turnId } entries — but tolerate the pre-queue
|
|
592
|
+
// single-object form and the original plain-text form too, since a
|
|
593
|
+
// file in flight during a rolling deploy can be in either shape.
|
|
594
|
+
let entries: Array<{ text?: unknown; format?: unknown }>;
|
|
592
595
|
try {
|
|
593
596
|
const raw = fs.readFileSync(filePath, 'utf8').trim();
|
|
594
597
|
try {
|
|
595
|
-
const parsed = JSON.parse(raw)
|
|
596
|
-
|
|
597
|
-
parseMode = parsed.format === 'html' ? 'html' : undefined;
|
|
598
|
+
const parsed: unknown = JSON.parse(raw);
|
|
599
|
+
entries = Array.isArray(parsed) ? parsed : [parsed as { text?: unknown; format?: unknown }];
|
|
598
600
|
} catch {
|
|
599
|
-
|
|
601
|
+
entries = [{ text: raw }];
|
|
600
602
|
}
|
|
601
603
|
fs.rmSync(filePath, { force: true });
|
|
602
604
|
} catch { continue; }
|
|
603
605
|
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
606
|
+
// Discord has no `.replied` dedup mechanism (unlike Telegram) — every
|
|
607
|
+
// queued entry is delivered, in order.
|
|
608
|
+
for (const entry of entries) {
|
|
609
|
+
let text = typeof entry.text === 'string' ? entry.text : '';
|
|
610
|
+
if (!text) continue;
|
|
611
|
+
try {
|
|
612
|
+
const channel = await this.client.channels.fetch(channelId);
|
|
613
|
+
if (entry.format === 'html') {
|
|
614
|
+
// Discord doesn't support HTML — strip tags and send plain text
|
|
615
|
+
text = text.replace(/<[^>]*>/g, '');
|
|
616
|
+
}
|
|
617
|
+
await sendMessage(channel, text, {});
|
|
618
|
+
} catch { /* non-fatal */ }
|
|
619
|
+
}
|
|
613
620
|
}
|
|
614
621
|
}
|
|
615
622
|
|
|
@@ -13,7 +13,7 @@ import * as fs from 'fs';
|
|
|
13
13
|
import * as os from 'os';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
|
|
16
|
-
import { searchArchive, getExcerpt, isMemoryScopedPath, archiveDbPath, sharedDbPathFromEnv, mergeHits } from './archive-reader';
|
|
16
|
+
import { searchArchive, findSimilarSharedNotes, getExcerpt, isMemoryScopedPath, archiveDbPath, sharedDbPathFromEnv, mergeHits } from './archive-reader';
|
|
17
17
|
|
|
18
18
|
// Build a temp agent dir with a kb.sqlite carrying the given chunks.
|
|
19
19
|
function mkAgentWithArchive(
|
|
@@ -210,3 +210,27 @@ test('getExcerpt: a symlink inside memory/ escaping the workspace is refused', (
|
|
|
210
210
|
fs.rmSync(agentDir, { recursive: true, force: true });
|
|
211
211
|
}
|
|
212
212
|
});
|
|
213
|
+
|
|
214
|
+
test('findSimilarSharedNotes: OR-matches on partial overlap where an AND search (searchArchive) would miss', () => {
|
|
215
|
+
const { workspaceDir } = mkAgentWithArchive([
|
|
216
|
+
{ id: 'notes/oncall-runbook.md#1-1', path: 'notes/oncall-runbook.md', start: 1, end: 1, text: 'escalate paging incidents to the platform team via pagerduty' },
|
|
217
|
+
{ id: 'notes/unrelated.md#1-1', path: 'notes/unrelated.md', start: 1, end: 1, text: 'deploy checklist for the frontend release pipeline' },
|
|
218
|
+
]);
|
|
219
|
+
const dbPath = archiveDbPath(workspaceDir);
|
|
220
|
+
// Seed text shares only "escalate" + "paging" with the runbook note, not the
|
|
221
|
+
// rest of its wording — an implicit-AND searchArchive() call would need every
|
|
222
|
+
// token to hit and returns nothing, but OR-based findSimilarSharedNotes finds it.
|
|
223
|
+
const seed = 'oncall escalation paging on-call playbook';
|
|
224
|
+
expect(searchArchive(dbPath, seed, 5).length).toBe(0);
|
|
225
|
+
const similar = findSimilarSharedNotes(dbPath, seed, 5);
|
|
226
|
+
expect(similar.length).toBe(1);
|
|
227
|
+
expect(similar[0].path).toBe('notes/oncall-runbook.md');
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test('findSimilarSharedNotes: no matching terms, or a missing DB, both return []', () => {
|
|
231
|
+
const { workspaceDir } = mkAgentWithArchive([
|
|
232
|
+
{ id: 'notes/oncall-runbook.md#1-1', path: 'notes/oncall-runbook.md', start: 1, end: 1, text: 'escalate paging incidents to the platform team' },
|
|
233
|
+
]);
|
|
234
|
+
expect(findSimilarSharedNotes(archiveDbPath(workspaceDir), 'completely unrelated topic zzz', 5)).toEqual([]);
|
|
235
|
+
expect(findSimilarSharedNotes('/nonexistent/kb.sqlite', 'oncall escalation', 5)).toEqual([]);
|
|
236
|
+
});
|
|
@@ -69,6 +69,22 @@ function toFtsMatch(query: string): string {
|
|
|
69
69
|
.join(' ');
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Same tokenizing/quoting as `toFtsMatch`, but joined with OR and capped to
|
|
74
|
+
* `maxTerms`. Used for "is anything like this already here?" lookups
|
|
75
|
+
* (`findSimilarSharedNotes`), where an implicit-AND match across a whole
|
|
76
|
+
* note's worth of terms would almost never hit — a near-duplicate rarely
|
|
77
|
+
* repeats every single word of the seed text.
|
|
78
|
+
*/
|
|
79
|
+
function toFtsMatchOr(query: string, maxTerms = 12): string {
|
|
80
|
+
return query
|
|
81
|
+
.split(/[^\p{L}\p{N}_]+/u)
|
|
82
|
+
.filter(Boolean)
|
|
83
|
+
.slice(0, maxTerms)
|
|
84
|
+
.map((t) => `"${t.replace(/"/g, '""')}"`)
|
|
85
|
+
.join(' OR ');
|
|
86
|
+
}
|
|
87
|
+
|
|
72
88
|
/**
|
|
73
89
|
* Keyword search over the archive (FTS5 BM25). Returns [] when the index does
|
|
74
90
|
* not exist yet or the query has no usable tokens. Read-only; never creates a DB.
|
|
@@ -111,16 +127,12 @@ function ensureEntryHashColumn(dbPath: string): void {
|
|
|
111
127
|
}
|
|
112
128
|
}
|
|
113
129
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
): SearchHit[] {
|
|
120
|
-
if (!fs.existsSync(dbPath)) return [];
|
|
121
|
-
const match = toFtsMatch(query);
|
|
122
|
-
if (!match) return [];
|
|
123
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Core FTS5 query, shared by `searchArchive` (implicit-AND keyword search)
|
|
132
|
+
* and `findSimilarSharedNotes` (OR-based near-duplicate lookup) — only the
|
|
133
|
+
* MATCH expression differs between the two callers.
|
|
134
|
+
*/
|
|
135
|
+
function runFtsMatchQuery(dbPath: string, match: string, maxResults: number): SearchHit[] {
|
|
124
136
|
// Heal pre-#346 DBs in place so the query never crashes on a missing column.
|
|
125
137
|
ensureEntryHashColumn(dbPath);
|
|
126
138
|
|
|
@@ -128,7 +140,6 @@ export function searchArchive(
|
|
|
128
140
|
// If the heal above could not run (read-only FS), select a NULL entry_hash
|
|
129
141
|
// rather than referencing a column that does not exist.
|
|
130
142
|
const entryHashSelect = hasEntryHashColumn(db) ? 'c.entry_hash' : 'NULL';
|
|
131
|
-
let hits: SearchHit[];
|
|
132
143
|
try {
|
|
133
144
|
const rows = db
|
|
134
145
|
.query(
|
|
@@ -153,7 +164,7 @@ export function searchArchive(
|
|
|
153
164
|
originClass: string | null;
|
|
154
165
|
importance: number | null;
|
|
155
166
|
}>;
|
|
156
|
-
|
|
167
|
+
return rows.map((r) => ({
|
|
157
168
|
path: r.path,
|
|
158
169
|
startLine: r.startLine,
|
|
159
170
|
endLine: r.endLine,
|
|
@@ -166,6 +177,18 @@ export function searchArchive(
|
|
|
166
177
|
} finally {
|
|
167
178
|
db.close();
|
|
168
179
|
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function searchArchive(
|
|
183
|
+
dbPath: string,
|
|
184
|
+
query: string,
|
|
185
|
+
maxResults: number,
|
|
186
|
+
opts?: { recordRetrievals?: boolean; now?: number },
|
|
187
|
+
): SearchHit[] {
|
|
188
|
+
if (!fs.existsSync(dbPath)) return [];
|
|
189
|
+
const match = toFtsMatch(query);
|
|
190
|
+
if (!match) return [];
|
|
191
|
+
const hits = runFtsMatchQuery(dbPath, match, maxResults);
|
|
169
192
|
|
|
170
193
|
// Recall counter (planning-66): fire-and-forget, append-only, best-effort. A
|
|
171
194
|
// dedicated writable handle (WAL + busy_timeout so it never fails a concurrent
|
|
@@ -191,6 +214,41 @@ export function searchArchive(
|
|
|
191
214
|
return hits;
|
|
192
215
|
}
|
|
193
216
|
|
|
217
|
+
export function recordSharedPathRetrieval(dbPath: string, sourcePath: string, now = Date.now()): void {
|
|
218
|
+
if (!fs.existsSync(dbPath)) return;
|
|
219
|
+
try {
|
|
220
|
+
const db = new Database(dbPath);
|
|
221
|
+
try {
|
|
222
|
+
db.exec('PRAGMA busy_timeout=2000');
|
|
223
|
+
const rows = db
|
|
224
|
+
.query('SELECT DISTINCT entry_hash FROM kb_chunks WHERE path = ? AND entry_hash IS NOT NULL')
|
|
225
|
+
.all(sourcePath) as Array<{ entry_hash: string | null }>;
|
|
226
|
+
recordRetrievalHits(
|
|
227
|
+
{ run: (sql, params = []) => void db.query(sql).run(...(params as never[])) },
|
|
228
|
+
rows.map((r) => r.entry_hash),
|
|
229
|
+
now,
|
|
230
|
+
);
|
|
231
|
+
} finally {
|
|
232
|
+
db.close();
|
|
233
|
+
}
|
|
234
|
+
} catch {
|
|
235
|
+
/* best-effort telemetry — never affect a direct read response */
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Find shared notes whose content overlaps `seedText` (typically a new
|
|
241
|
+
* note's name plus the opening of its content) — the basis of
|
|
242
|
+
* `memory_shared_create`'s "does something like this already exist?" nudge.
|
|
243
|
+
* Read-only, same missing-DB/empty-query behavior as `searchArchive`.
|
|
244
|
+
*/
|
|
245
|
+
export function findSimilarSharedNotes(dbPath: string, seedText: string, maxResults = 3): SearchHit[] {
|
|
246
|
+
if (!fs.existsSync(dbPath)) return [];
|
|
247
|
+
const match = toFtsMatchOr(seedText);
|
|
248
|
+
if (!match) return [];
|
|
249
|
+
return runFtsMatchQuery(dbPath, match, maxResults);
|
|
250
|
+
}
|
|
251
|
+
|
|
194
252
|
/** A memory-scoped path: MEMORY.md, USER.md, or memory/**.md — no traversal. */
|
|
195
253
|
export function isMemoryScopedPath(relPath: string): boolean {
|
|
196
254
|
const p = relPath.replace(/\\/g, '/');
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bun tests for the shared-KB write mirror (memory_shared_create/_get/_update/
|
|
3
|
+
* _delete's building blocks). Runs under Bun (`bun test`) alongside archive-reader.test.ts.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { test, expect } from 'bun:test';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
sharedNoteFilename,
|
|
13
|
+
sharedNoteExists,
|
|
14
|
+
readSharedNote,
|
|
15
|
+
writeSharedNoteAtomic,
|
|
16
|
+
deleteSharedNote,
|
|
17
|
+
contentLossPercent,
|
|
18
|
+
triggerSharedReindex,
|
|
19
|
+
} from './archive-writer';
|
|
20
|
+
import { searchArchive } from './archive-reader';
|
|
21
|
+
|
|
22
|
+
function tmpVaultDir(): string {
|
|
23
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), 'kb-shared-write-'));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
test('sharedNoteFilename: slugifies, strips .md, contains to one segment (mirrors Node-side shared-writer)', () => {
|
|
27
|
+
expect(sharedNoteFilename('My Cool Note.md')).toBe('my-cool-note.md');
|
|
28
|
+
expect(sharedNoteFilename('../../etc/passwd')).toBe('etc-passwd.md'); // no separators survive
|
|
29
|
+
expect(sharedNoteFilename('')).toBe('note.md');
|
|
30
|
+
expect(sharedNoteFilename('a/b\\c')).toBe('a-b-c.md');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('writeSharedNoteAtomic: writes atomically into <vaultDir>/notes and cannot escape it', () => {
|
|
34
|
+
const vaultDir = tmpVaultDir();
|
|
35
|
+
try {
|
|
36
|
+
const p = writeSharedNoteAtomic(vaultDir, '../escape attempt', 'shared body');
|
|
37
|
+
const notesDir = path.join(vaultDir, 'notes');
|
|
38
|
+
expect(p.startsWith(notesDir + path.sep)).toBe(true); // contained
|
|
39
|
+
expect(fs.readFileSync(p, 'utf8')).toBe('shared body');
|
|
40
|
+
// No stray temp files left behind.
|
|
41
|
+
expect(fs.readdirSync(notesDir).some((f) => f.startsWith('.tmp-'))).toBe(false);
|
|
42
|
+
} finally {
|
|
43
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('sharedNoteExists: false before write, true after — the basis for memory_shared_create/_update\'s existence gates', () => {
|
|
48
|
+
const vaultDir = tmpVaultDir();
|
|
49
|
+
try {
|
|
50
|
+
expect(sharedNoteExists(vaultDir, 'oncall')).toBe(false);
|
|
51
|
+
writeSharedNoteAtomic(vaultDir, 'oncall', 'escalate paging incidents to platform team');
|
|
52
|
+
expect(sharedNoteExists(vaultDir, 'oncall')).toBe(true);
|
|
53
|
+
} finally {
|
|
54
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('readSharedNote: null before write, full content after', () => {
|
|
59
|
+
const vaultDir = tmpVaultDir();
|
|
60
|
+
try {
|
|
61
|
+
expect(readSharedNote(vaultDir, 'oncall')).toBeNull();
|
|
62
|
+
writeSharedNoteAtomic(vaultDir, 'oncall', 'escalate paging incidents to platform team');
|
|
63
|
+
expect(readSharedNote(vaultDir, 'oncall')).toBe('escalate paging incidents to platform team');
|
|
64
|
+
} finally {
|
|
65
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test('writeSharedNoteAtomic: same name overwrites in place (update semantics, no duplicate file)', () => {
|
|
70
|
+
const vaultDir = tmpVaultDir();
|
|
71
|
+
try {
|
|
72
|
+
const p1 = writeSharedNoteAtomic(vaultDir, 'oncall', 'v1: escalate to platform team');
|
|
73
|
+
const p2 = writeSharedNoteAtomic(vaultDir, 'oncall', 'v2: escalate to SRE team');
|
|
74
|
+
expect(p1).toBe(p2);
|
|
75
|
+
expect(fs.readFileSync(p2, 'utf8')).toBe('v2: escalate to SRE team');
|
|
76
|
+
expect(fs.readdirSync(path.join(vaultDir, 'notes')).length).toBe(1);
|
|
77
|
+
} finally {
|
|
78
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('deleteSharedNote: removes an existing note and reports true; false (no-op) if absent', () => {
|
|
83
|
+
const vaultDir = tmpVaultDir();
|
|
84
|
+
try {
|
|
85
|
+
expect(deleteSharedNote(vaultDir, 'oncall')).toBe(false); // nothing written yet
|
|
86
|
+
writeSharedNoteAtomic(vaultDir, 'oncall', 'escalate paging incidents to platform team');
|
|
87
|
+
expect(sharedNoteExists(vaultDir, 'oncall')).toBe(true);
|
|
88
|
+
expect(deleteSharedNote(vaultDir, 'oncall')).toBe(true);
|
|
89
|
+
expect(sharedNoteExists(vaultDir, 'oncall')).toBe(false);
|
|
90
|
+
expect(deleteSharedNote(vaultDir, 'oncall')).toBe(false); // already gone
|
|
91
|
+
} finally {
|
|
92
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('deleteSharedNote: cannot escape the notes dir (name is filename-slugified first)', () => {
|
|
97
|
+
const vaultDir = tmpVaultDir();
|
|
98
|
+
try {
|
|
99
|
+
// Nothing outside notes/ can ever be targeted, so this is always a no-op.
|
|
100
|
+
expect(deleteSharedNote(vaultDir, '../../etc/passwd')).toBe(false);
|
|
101
|
+
} finally {
|
|
102
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('contentLossPercent: 0 when every old line survives, 100 when none do', () => {
|
|
107
|
+
const oldContent = 'line one\nline two\nline three';
|
|
108
|
+
expect(contentLossPercent(oldContent, 'line one\nline two\nline three\nline four')).toBe(0); // pure append, nothing dropped
|
|
109
|
+
expect(contentLossPercent(oldContent, 'totally different content')).toBe(100);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('contentLossPercent: dropping a subset of old lines is proportional loss, not zero', () => {
|
|
113
|
+
const oldContent = 'line one\nline two\nline three';
|
|
114
|
+
expect(contentLossPercent(oldContent, 'line one\nline two')).toBe(33); // 1 of 3 old lines missing
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('contentLossPercent: partial loss rounds to nearest percent', () => {
|
|
118
|
+
// 2 of 4 old lines survive verbatim -> 50% lost.
|
|
119
|
+
const oldContent = 'a\nb\nc\nd';
|
|
120
|
+
expect(contentLossPercent(oldContent, 'a\nb\nsomething else')).toBe(50);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('contentLossPercent: empty old content never divides by zero', () => {
|
|
124
|
+
expect(contentLossPercent('', 'brand new content')).toBe(0);
|
|
125
|
+
expect(contentLossPercent('\n\n', 'brand new content')).toBe(0); // blank-only old content
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('triggerSharedReindex: never throws, even when the compiled CLI is missing', () => {
|
|
129
|
+
const vaultDir = tmpVaultDir();
|
|
130
|
+
try {
|
|
131
|
+
expect(() => triggerSharedReindex(vaultDir)).not.toThrow();
|
|
132
|
+
} finally {
|
|
133
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// End-to-end proof of the acceptance criterion: a written note is discoverable
|
|
138
|
+
// via the same search path memory_search uses, WITHOUT waiting for the nightly
|
|
139
|
+
// dream or a manual reindex step. Uses the real compiled reindex-cli.js (built
|
|
140
|
+
// by `npm run build` into dist/ alongside this package, per package.json
|
|
141
|
+
// `files`) — skips gracefully if that build artifact is missing (e.g. a bare
|
|
142
|
+
// `bun test` run against source with no prior `npm run build`).
|
|
143
|
+
test('memory_shared_create flow: write + triggerSharedReindex makes the note searchable within a few seconds', async () => {
|
|
144
|
+
const cliPath = path.join(__dirname, '..', '..', '..', 'dist', 'agent', 'knowledge', 'reindex-cli.js');
|
|
145
|
+
if (!fs.existsSync(cliPath)) {
|
|
146
|
+
console.warn('[archive-writer.test] dist/agent/knowledge/reindex-cli.js missing — run `npm run build` first; skipping e2e reindex test');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const vaultDir = tmpVaultDir();
|
|
150
|
+
try {
|
|
151
|
+
const content = 'The staging cluster now runs on kubernetes in ap-southeast-1.';
|
|
152
|
+
writeSharedNoteAtomic(vaultDir, 'infra-note', content);
|
|
153
|
+
triggerSharedReindex(vaultDir);
|
|
154
|
+
|
|
155
|
+
const dbPath = path.join(vaultDir, 'kb.sqlite');
|
|
156
|
+
const deadline = Date.now() + 8000;
|
|
157
|
+
let hits: ReturnType<typeof searchArchive> = [];
|
|
158
|
+
while (Date.now() < deadline) {
|
|
159
|
+
hits = searchArchive(dbPath, 'staging cluster kubernetes', 5);
|
|
160
|
+
if (hits.length > 0) break;
|
|
161
|
+
await new Promise((r) => setTimeout(r, 150));
|
|
162
|
+
}
|
|
163
|
+
expect(hits.length).toBeGreaterThan(0);
|
|
164
|
+
expect(hits[0].snippet).toContain('kubernetes');
|
|
165
|
+
} finally {
|
|
166
|
+
fs.rmSync(vaultDir, { recursive: true, force: true });
|
|
167
|
+
}
|
|
168
|
+
}, 12000);
|