@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":"reflection.js","sourceRoot":"","sources":["../../../src/agent/knowledge/reflection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node-native near-duplicate search over the shared vault's `kb.sqlite`
|
|
3
|
+
* (planning-64 K3 follow-up / issue #386).
|
|
4
|
+
*
|
|
5
|
+
* The shared vault is indexed with the SAME `ArchiveDB` schema the per-agent
|
|
6
|
+
* archive uses (`indexSharedArchive` in `indexer.ts` calls
|
|
7
|
+
* `ArchiveDB.forPath(sharedDbPath(cfg), ...)`), so `ArchiveDB.searchSimilar`
|
|
8
|
+
* works against it unmodified. This exists because the MCP tools'
|
|
9
|
+
* `findSimilarSharedNotes` (`mcp/tools/memory/archive-reader.ts`) runs under
|
|
10
|
+
* Bun (`bun:sqlite`) and cannot be imported from here — the Node gateway
|
|
11
|
+
* process (`node:sqlite`). Same on-disk file, two bindings; keep both in sync.
|
|
12
|
+
*/
|
|
13
|
+
import type { ResolvedKnowledgeSharedCfg } from './types';
|
|
14
|
+
export interface SimilarSharedNote {
|
|
15
|
+
/** The note's freeform name (its filename under notes/, minus `.md`). */
|
|
16
|
+
name: string;
|
|
17
|
+
snippet: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* FTS term budget for a near-dup lookup. `searchSimilar` truncates the seed to
|
|
21
|
+
* this many terms, so the budget has to be split deliberately between the note
|
|
22
|
+
* name and its content (`buildSeedText`) — a long freeform name used to consume
|
|
23
|
+
* all 12 terms and the promoted fact itself never reached the query (issue #398).
|
|
24
|
+
*/
|
|
25
|
+
export declare const SEED_TERM_BUDGET = 16;
|
|
26
|
+
/**
|
|
27
|
+
* Find shared notes whose content overlaps `seedText`. Read-only; returns []
|
|
28
|
+
* when the shared index doesn't exist yet or the seed has no usable tokens.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findSimilarSharedNotes(cfg: ResolvedKnowledgeSharedCfg, seedText: string, maxResults?: number, maxTerms?: number): SimilarSharedNote[];
|
|
31
|
+
/** Normalized, stopword-free, deduped content tokens of a text. */
|
|
32
|
+
export declare function significantTokens(text: string): Set<string>;
|
|
33
|
+
/**
|
|
34
|
+
* How much of `seed` the `candidate` already covers, in [0, 1]. Containment
|
|
35
|
+
* (not Jaccard) on purpose: a short new fact merging into a long established
|
|
36
|
+
* note is a legitimate near-duplicate, and Jaccard would punish it for the
|
|
37
|
+
* candidate's length alone.
|
|
38
|
+
*
|
|
39
|
+
* Note the asymmetry in the inputs: `seed` is the truncated query text
|
|
40
|
+
* (`buildSeedText`), while `candidate` should be a full note body. The score is
|
|
41
|
+
* therefore "how much of the QUERY this note already says" — the candidate is
|
|
42
|
+
* never penalised for saying more.
|
|
43
|
+
*/
|
|
44
|
+
export declare function containmentScore(seed: string, candidate: string): number;
|
|
45
|
+
/**
|
|
46
|
+
* Minimum containment for an UNATTENDED merge. Deliberately strict: creating a
|
|
47
|
+
* separate note when two really were duplicates is a tidy-up cost, while merging
|
|
48
|
+
* two unrelated facts destroys both (the reader can no longer tell which note
|
|
49
|
+
* the fact belongs to). Errors are pushed to the recoverable side.
|
|
50
|
+
*
|
|
51
|
+
* Read this against what the seed actually IS. Callers score against
|
|
52
|
+
* `buildSeedText`'s output, which is capped at `SEED_TERM_BUDGET` significant
|
|
53
|
+
* tokens (a minority from the name, the rest from the fact) — so the bar is "half
|
|
54
|
+
* of the fact's first ~11 topic words are already in this note", not "half of the
|
|
55
|
+
* whole fact". That is looser than the bare number reads, and deliberately so:
|
|
56
|
+
* the cap is what keeps the FTS query itself affordable, and the same truncation
|
|
57
|
+
* has to apply on both sides for the score to mean anything.
|
|
58
|
+
*/
|
|
59
|
+
export declare const MIN_MERGE_CONTAINMENT = 0.5;
|
|
60
|
+
/**
|
|
61
|
+
* Minimum containment for emitting a `[[wikilink]]` to a note (issue #386 part
|
|
62
|
+
* B's graph edges). Lower than the merge bar on purpose — the two operations
|
|
63
|
+
* make different claims. A merge asserts "these are the same fact" and destroys
|
|
64
|
+
* the distinction between them; a link only asserts "these are related" and is
|
|
65
|
+
* additive, so the same evidence buys a link long before it buys a merge.
|
|
66
|
+
*/
|
|
67
|
+
export declare const MIN_RELATED_CONTAINMENT = 0.25;
|
|
68
|
+
/**
|
|
69
|
+
* Candidates that clear `minContainment` against the seed, best first.
|
|
70
|
+
*
|
|
71
|
+
* `resolveText` decides WHAT the candidate is scored against. It defaults to the
|
|
72
|
+
* FTS snippet, but callers that can read the note should pass its full body: a
|
|
73
|
+
* snippet is one 500-char chunk, so an established note that a recurring topic
|
|
74
|
+
* has merged into for months spreads the seed's tokens across several chunks and
|
|
75
|
+
* scores far below its true containment — turning the bar into "much stricter
|
|
76
|
+
* than 0.5" for exactly the notes that most need to match (issue #398 review).
|
|
77
|
+
*/
|
|
78
|
+
export declare function filterNearDuplicates(seedText: string, candidates: SimilarSharedNote[], minContainment?: number, resolveText?: (c: SimilarSharedNote) => string): SimilarSharedNote[];
|
|
79
|
+
/**
|
|
80
|
+
* Balanced FTS seed for a promotion lookup: the name gets a minority share of
|
|
81
|
+
* `SEED_TERM_BUDGET` and the promoted fact gets the rest, so a long freeform
|
|
82
|
+
* `reason` can no longer starve the content out of the query (issue #398).
|
|
83
|
+
*/
|
|
84
|
+
export declare function buildSeedText(name: string, content: string, budget?: number): string;
|
|
85
|
+
//# sourceMappingURL=shared-dedup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-dedup.d.ts","sourceRoot":"","sources":["../../../src/agent/knowledge/shared-dedup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,0BAA0B,EAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,SAAI,EACd,QAAQ,SAAmB,GAC1B,iBAAiB,EAAE,CASrB;AA0BD,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,cAAc,SAAwB,EACtC,WAAW,GAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,MAAyB,GAC/D,iBAAiB,EAAE,CAMrB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAmB,GAAG,MAAM,CAK9F"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Node-native near-duplicate search over the shared vault's `kb.sqlite`
|
|
4
|
+
* (planning-64 K3 follow-up / issue #386).
|
|
5
|
+
*
|
|
6
|
+
* The shared vault is indexed with the SAME `ArchiveDB` schema the per-agent
|
|
7
|
+
* archive uses (`indexSharedArchive` in `indexer.ts` calls
|
|
8
|
+
* `ArchiveDB.forPath(sharedDbPath(cfg), ...)`), so `ArchiveDB.searchSimilar`
|
|
9
|
+
* works against it unmodified. This exists because the MCP tools'
|
|
10
|
+
* `findSimilarSharedNotes` (`mcp/tools/memory/archive-reader.ts`) runs under
|
|
11
|
+
* Bun (`bun:sqlite`) and cannot be imported from here — the Node gateway
|
|
12
|
+
* process (`node:sqlite`). Same on-disk file, two bindings; keep both in sync.
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.MIN_RELATED_CONTAINMENT = exports.MIN_MERGE_CONTAINMENT = exports.SEED_TERM_BUDGET = void 0;
|
|
49
|
+
exports.findSimilarSharedNotes = findSimilarSharedNotes;
|
|
50
|
+
exports.significantTokens = significantTokens;
|
|
51
|
+
exports.containmentScore = containmentScore;
|
|
52
|
+
exports.filterNearDuplicates = filterNearDuplicates;
|
|
53
|
+
exports.buildSeedText = buildSeedText;
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const archive_db_1 = require("./archive-db");
|
|
57
|
+
const config_1 = require("./config");
|
|
58
|
+
/**
|
|
59
|
+
* FTS term budget for a near-dup lookup. `searchSimilar` truncates the seed to
|
|
60
|
+
* this many terms, so the budget has to be split deliberately between the note
|
|
61
|
+
* name and its content (`buildSeedText`) — a long freeform name used to consume
|
|
62
|
+
* all 12 terms and the promoted fact itself never reached the query (issue #398).
|
|
63
|
+
*/
|
|
64
|
+
exports.SEED_TERM_BUDGET = 16;
|
|
65
|
+
/**
|
|
66
|
+
* Find shared notes whose content overlaps `seedText`. Read-only; returns []
|
|
67
|
+
* when the shared index doesn't exist yet or the seed has no usable tokens.
|
|
68
|
+
*/
|
|
69
|
+
function findSimilarSharedNotes(cfg, seedText, maxResults = 3, maxTerms = exports.SEED_TERM_BUDGET) {
|
|
70
|
+
const dbPath = (0, config_1.sharedDbPath)(cfg);
|
|
71
|
+
if (!fs.existsSync(dbPath))
|
|
72
|
+
return [];
|
|
73
|
+
const db = archive_db_1.ArchiveDB.forPath(dbPath);
|
|
74
|
+
const hits = db.searchSimilar(seedText, maxResults, maxTerms);
|
|
75
|
+
return hits.map((h) => ({
|
|
76
|
+
name: path.basename(h.path, '.md'),
|
|
77
|
+
snippet: h.text.length > 500 ? `${h.text.slice(0, 500)}…` : h.text,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
// ── Near-duplicate gate (issue #398) ────────────────────────────────────────
|
|
81
|
+
//
|
|
82
|
+
// FTS above is RECALL only: `searchSimilar` ORs the seed's tokens, so a single
|
|
83
|
+
// shared word is enough to return a hit. Auto-promotion used to treat any hit
|
|
84
|
+
// as a near-duplicate and merge into it unattended, which fused unrelated notes
|
|
85
|
+
// together (a live vault had 39 of 48 chunks matching a typical seed). Recall
|
|
86
|
+
// stays loose — a real near-dup rarely repeats every word — and the PRECISION
|
|
87
|
+
// bar below decides what may actually be merged.
|
|
88
|
+
//
|
|
89
|
+
// The bar is deterministic token containment rather than a BM25 cutoff: BM25 is
|
|
90
|
+
// corpus-relative, so a threshold tuned on one vault silently changes meaning as
|
|
91
|
+
// the vault grows. Containment ("how much of the seed does this note already
|
|
92
|
+
// say?") is stable, explainable, and testable offline.
|
|
93
|
+
/** Tokens carried by markdown/prose scaffolding rather than by the fact itself. */
|
|
94
|
+
const STOPWORDS = new Set([
|
|
95
|
+
'a', 'an', 'and', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'for', 'from', 'had', 'has', 'have', 'he', 'her', 'his',
|
|
96
|
+
'how', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'me', 'my', 'need', 'needs', 'new', 'not', 'of', 'on', 'or', 'our', 'she', 'so',
|
|
97
|
+
'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'to', 'up', 'use', 'used', 'user', 'was', 'we',
|
|
98
|
+
'were', 'what', 'when', 'where', 'which', 'while', 'who', 'why', 'will', 'with', 'would', 'you', 'your',
|
|
99
|
+
// markdown / memory-file scaffolding: present in almost every promoted line
|
|
100
|
+
'md', 'memory', 'index', 'entry', 'note', 'notes', 'pointer', 'pointers', 'add', 'added', 'insert', 'section', 'file', 'files',
|
|
101
|
+
]);
|
|
102
|
+
/** Normalized, stopword-free, deduped content tokens of a text. */
|
|
103
|
+
function significantTokens(text) {
|
|
104
|
+
const out = new Set();
|
|
105
|
+
for (const raw of text.toLowerCase().split(/[^\p{L}\p{N}_]+/u)) {
|
|
106
|
+
if (raw.length < 3)
|
|
107
|
+
continue; // 1-2 char fragments carry no topic signal
|
|
108
|
+
if (STOPWORDS.has(raw))
|
|
109
|
+
continue;
|
|
110
|
+
out.add(raw);
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* How much of `seed` the `candidate` already covers, in [0, 1]. Containment
|
|
116
|
+
* (not Jaccard) on purpose: a short new fact merging into a long established
|
|
117
|
+
* note is a legitimate near-duplicate, and Jaccard would punish it for the
|
|
118
|
+
* candidate's length alone.
|
|
119
|
+
*
|
|
120
|
+
* Note the asymmetry in the inputs: `seed` is the truncated query text
|
|
121
|
+
* (`buildSeedText`), while `candidate` should be a full note body. The score is
|
|
122
|
+
* therefore "how much of the QUERY this note already says" — the candidate is
|
|
123
|
+
* never penalised for saying more.
|
|
124
|
+
*/
|
|
125
|
+
function containmentScore(seed, candidate) {
|
|
126
|
+
const a = significantTokens(seed);
|
|
127
|
+
if (a.size === 0)
|
|
128
|
+
return 0;
|
|
129
|
+
const b = significantTokens(candidate);
|
|
130
|
+
let hit = 0;
|
|
131
|
+
for (const t of a)
|
|
132
|
+
if (b.has(t))
|
|
133
|
+
hit++;
|
|
134
|
+
return hit / a.size;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Minimum containment for an UNATTENDED merge. Deliberately strict: creating a
|
|
138
|
+
* separate note when two really were duplicates is a tidy-up cost, while merging
|
|
139
|
+
* two unrelated facts destroys both (the reader can no longer tell which note
|
|
140
|
+
* the fact belongs to). Errors are pushed to the recoverable side.
|
|
141
|
+
*
|
|
142
|
+
* Read this against what the seed actually IS. Callers score against
|
|
143
|
+
* `buildSeedText`'s output, which is capped at `SEED_TERM_BUDGET` significant
|
|
144
|
+
* tokens (a minority from the name, the rest from the fact) — so the bar is "half
|
|
145
|
+
* of the fact's first ~11 topic words are already in this note", not "half of the
|
|
146
|
+
* whole fact". That is looser than the bare number reads, and deliberately so:
|
|
147
|
+
* the cap is what keeps the FTS query itself affordable, and the same truncation
|
|
148
|
+
* has to apply on both sides for the score to mean anything.
|
|
149
|
+
*/
|
|
150
|
+
exports.MIN_MERGE_CONTAINMENT = 0.5;
|
|
151
|
+
/**
|
|
152
|
+
* Minimum containment for emitting a `[[wikilink]]` to a note (issue #386 part
|
|
153
|
+
* B's graph edges). Lower than the merge bar on purpose — the two operations
|
|
154
|
+
* make different claims. A merge asserts "these are the same fact" and destroys
|
|
155
|
+
* the distinction between them; a link only asserts "these are related" and is
|
|
156
|
+
* additive, so the same evidence buys a link long before it buys a merge.
|
|
157
|
+
*/
|
|
158
|
+
exports.MIN_RELATED_CONTAINMENT = 0.25;
|
|
159
|
+
/**
|
|
160
|
+
* Candidates that clear `minContainment` against the seed, best first.
|
|
161
|
+
*
|
|
162
|
+
* `resolveText` decides WHAT the candidate is scored against. It defaults to the
|
|
163
|
+
* FTS snippet, but callers that can read the note should pass its full body: a
|
|
164
|
+
* snippet is one 500-char chunk, so an established note that a recurring topic
|
|
165
|
+
* has merged into for months spreads the seed's tokens across several chunks and
|
|
166
|
+
* scores far below its true containment — turning the bar into "much stricter
|
|
167
|
+
* than 0.5" for exactly the notes that most need to match (issue #398 review).
|
|
168
|
+
*/
|
|
169
|
+
function filterNearDuplicates(seedText, candidates, minContainment = exports.MIN_MERGE_CONTAINMENT, resolveText = (c) => c.snippet) {
|
|
170
|
+
return candidates
|
|
171
|
+
.map((c) => ({ c, score: containmentScore(seedText, resolveText(c)) }))
|
|
172
|
+
.filter((x) => x.score >= minContainment)
|
|
173
|
+
.sort((x, y) => y.score - x.score)
|
|
174
|
+
.map((x) => x.c);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Balanced FTS seed for a promotion lookup: the name gets a minority share of
|
|
178
|
+
* `SEED_TERM_BUDGET` and the promoted fact gets the rest, so a long freeform
|
|
179
|
+
* `reason` can no longer starve the content out of the query (issue #398).
|
|
180
|
+
*/
|
|
181
|
+
function buildSeedText(name, content, budget = exports.SEED_TERM_BUDGET) {
|
|
182
|
+
const nameBudget = Math.max(1, Math.floor(budget / 3));
|
|
183
|
+
const nameTokens = [...significantTokens(name)].slice(0, nameBudget);
|
|
184
|
+
const contentTokens = [...significantTokens(content)].filter((t) => !nameTokens.includes(t));
|
|
185
|
+
return [...nameTokens, ...contentTokens].slice(0, budget).join(' ');
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=shared-dedup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-dedup.js","sourceRoot":"","sources":["../../../src/agent/knowledge/shared-dedup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,93 @@
|
|
|
1
|
+
import { writeSharedNote } from './shared-writer';
|
|
1
2
|
import type { KnowledgeSharedConfig } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Merge a newly-promoted fact into a note's existing content, rather than
|
|
5
|
+
* blindly overwriting it. Deterministic append (no extra LLM call — dreaming
|
|
6
|
+
* already spent its budget proposing the fact); a no-op if the addition is
|
|
7
|
+
* already present verbatim. `relatedNames` (issue #386 part B) adds
|
|
8
|
+
* `[[wikilink]]`s to OTHER near-duplicate notes found alongside the merge
|
|
9
|
+
* target, so the existing (previously unpopulated) `/knowledge/graph`
|
|
10
|
+
* dashboard gets real edges — `wiki.ts` already resolves `[[links]]` into
|
|
11
|
+
* graph edges, no parser change needed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function mergeIntoNote(existing: string, addition: string, relatedNames?: string[]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Write only if the result stays within the same size cap the manual
|
|
16
|
+
* `memory_shared_create`/`_update` tools enforce. Unlike those tools, dreaming
|
|
17
|
+
* has no one to show a "content too large" error to — a note a recurring topic
|
|
18
|
+
* keeps merging into over months has no natural stopping point otherwise, so
|
|
19
|
+
* once a merge would cross the cap the note is left as-is (best-effort: a
|
|
20
|
+
* skipped promotion never fails the local dream, same as any other error here).
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeCapped(cfg: Parameters<typeof writeSharedNote>[0], name: string, content: string, relatedNames?: string[]): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* True when the content is nothing but `MEMORY.md` index pointers.
|
|
25
|
+
*
|
|
26
|
+
* The memory-tiering convention writes a fact to its own file AND a one-line
|
|
27
|
+
* pointer into the `MEMORY.md` index. Both land as durable `add`s, so both used
|
|
28
|
+
* to be promoted — and the pointer's links resolve only inside the promoting
|
|
29
|
+
* agent's own workspace, making it dead weight in a shared vault (issue #398:
|
|
30
|
+
* 30 of 40 live notes were pointer-only, with all 32 link targets dangling).
|
|
31
|
+
*
|
|
32
|
+
* The trailing hook text is deliberately NOT rescued into a note of its own: an
|
|
33
|
+
* index hook is written to be read next to the file it points at, so promoting
|
|
34
|
+
* it alone would put a decontextualized fragment in front of every other agent.
|
|
35
|
+
* A dream that proposes the fact itself as prose still promotes normally — only
|
|
36
|
+
* navigation scaffolding is dropped.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isIndexPointerOnly(content: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* True when a note name reads as an instruction for editing a file rather than
|
|
41
|
+
* as the name of a fact ("insert after cron config, before the pty_shell
|
|
42
|
+
* section"). `reason` is prompted as free-form justification (`reviewer.ts`) but
|
|
43
|
+
* issue #386 repurposed it as the shared note's identity, so such strings became
|
|
44
|
+
* note names that no future occurrence of the same fact can ever match.
|
|
45
|
+
*
|
|
46
|
+
* Two signals are required — an imperative edit verb AND a positional/file
|
|
47
|
+
* anchor — because either alone is common in legitimate names ("Add-on billing
|
|
48
|
+
* is per seat", "the section header is user-visible").
|
|
49
|
+
*/
|
|
50
|
+
export declare function isInstructionShapedName(name: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* A note name derived from the fact itself — the fallback when the proposal has
|
|
53
|
+
* no `topic` and its `reason` reads as an editing instruction.
|
|
54
|
+
*
|
|
55
|
+
* Dropping such a promotion outright (the first cut of issue #398) silently lost
|
|
56
|
+
* genuine facts whose reason merely happened to start with an edit verb, e.g.
|
|
57
|
+
* "Update the deploy section after the API change". Naming from the content
|
|
58
|
+
* keeps the fact; only content with nothing nameable in it is given up on.
|
|
59
|
+
*/
|
|
60
|
+
export declare function deriveNameFromContent(content: string): string | undefined;
|
|
2
61
|
/**
|
|
3
62
|
* Build the per-agent→shared promotion function used after the dreaming applier
|
|
4
63
|
* writes an `add` to local memory (K3↔K4). Returns `undefined` when the shared
|
|
5
64
|
* KB is disabled or in `propose` (dry-run) mode — callers then skip promotion.
|
|
6
65
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
66
|
+
* Note identity is the proposal's `reason` (issue #386) — the SAME freeform
|
|
67
|
+
* namespace `memory_shared_create`/`_update` use, not a content hash. A
|
|
68
|
+
* content-hashed name (the pre-#386 scheme) meant the same recurring fact,
|
|
69
|
+
* reworded slightly by the reviewer each night, hashed differently and was
|
|
70
|
+
* written as a brand-new note every time — this is what created the
|
|
71
|
+
* near-duplicate pileup #386 reports. Naming by `reason` instead means the
|
|
72
|
+
* same recurring fact maps to the same note name across nights, landing as an
|
|
73
|
+
* update. A `reason` that doesn't collide by name is also checked against the
|
|
74
|
+
* shared vault's near-dup search before creating, and merged into the closest
|
|
75
|
+
* match instead of creating a disconnected duplicate when one is found.
|
|
76
|
+
*
|
|
77
|
+
* Concurrency note: the name-collision check, read, and write below are not one
|
|
78
|
+
* atomic operation, so two agents dreaming at the same moment and promoting
|
|
79
|
+
* under the exact same `reason` can race — `shared-writer.ts` already documents
|
|
80
|
+
* that same-file races resolve to last-write-wins, never corruption, and other
|
|
81
|
+
* read-modify-write callers (e.g. `memory_shared_update`) have this same
|
|
82
|
+
* property. Naming by `reason` instead of a content hash makes same-name
|
|
83
|
+
* collisions between different agents more likely than the pre-#386 scheme, but
|
|
84
|
+
* it's the same accepted tradeoff, not a new class of risk.
|
|
13
85
|
*/
|
|
14
|
-
export declare function makeSharedPromoter(agentId: string, agentCfg: KnowledgeSharedConfig | undefined, globalCfg: KnowledgeSharedConfig | undefined
|
|
86
|
+
export declare function makeSharedPromoter(agentId: string, agentCfg: KnowledgeSharedConfig | undefined, globalCfg: KnowledgeSharedConfig | undefined, logger?: {
|
|
87
|
+
info: (msg: string, data?: Record<string, unknown>) => void;
|
|
88
|
+
}): ((p: {
|
|
15
89
|
reason: string;
|
|
16
90
|
content?: string;
|
|
91
|
+
topic?: string;
|
|
17
92
|
}) => void) | undefined;
|
|
18
93
|
//# sourceMappingURL=shared-promote.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-promote.d.ts","sourceRoot":"","sources":["../../../src/agent/knowledge/shared-promote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared-promote.d.ts","sourceRoot":"","sources":["../../../src/agent/knowledge/shared-promote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,CAarG;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,EAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAM,EAAO,GAC1B,OAAO,CAKT;AAOD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO3D;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAMhC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAC3C,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAI5C,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,GACvE,CAAC,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAoHjF"}
|