@monoes/monomindcli 2.13.0 → 2.14.1
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/.claude/skills/monodesign/scripts/context.mjs +1 -1
- package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +2 -2
- package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +2 -2
- package/.claude/skills/monodesign/scripts/live-browser.js +1 -1
- package/bin/cli.js +21 -1
- package/bin/mcp-server.js +21 -1
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +23 -0
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/commands/doc-filters.d.ts +19 -0
- package/dist/src/commands/doc-filters.d.ts.map +1 -0
- package/dist/src/commands/doc-filters.js +58 -0
- package/dist/src/commands/doc-filters.js.map +1 -0
- package/dist/src/commands/doc-library.d.ts +21 -0
- package/dist/src/commands/doc-library.d.ts.map +1 -0
- package/dist/src/commands/doc-library.js +390 -0
- package/dist/src/commands/doc-library.js.map +1 -0
- package/dist/src/commands/doc-list.d.ts +9 -0
- package/dist/src/commands/doc-list.d.ts.map +1 -0
- package/dist/src/commands/doc-list.js +99 -0
- package/dist/src/commands/doc-list.js.map +1 -0
- package/dist/src/commands/doc.d.ts.map +1 -1
- package/dist/src/commands/doc.js +49 -37
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/doctor-mcp-probe.d.ts +48 -0
- package/dist/src/commands/doctor-mcp-probe.d.ts.map +1 -0
- package/dist/src/commands/doctor-mcp-probe.js +205 -0
- package/dist/src/commands/doctor-mcp-probe.js.map +1 -0
- package/dist/src/commands/doctor-project-checks.d.ts +12 -1
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +55 -4
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +10 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +17 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +4 -3
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +14 -0
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +12 -2
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +2 -1
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +3 -3
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +6 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/init/write-runtime-config.d.ts.map +1 -1
- package/dist/src/init/write-runtime-config.js +12 -2
- package/dist/src/init/write-runtime-config.js.map +1 -1
- package/dist/src/knowledge/capture-envelope.d.ts +80 -0
- package/dist/src/knowledge/capture-envelope.d.ts.map +1 -0
- package/dist/src/knowledge/capture-envelope.js +165 -0
- package/dist/src/knowledge/capture-envelope.js.map +1 -0
- package/dist/src/knowledge/capture-text.d.ts +23 -0
- package/dist/src/knowledge/capture-text.d.ts.map +1 -0
- package/dist/src/knowledge/capture-text.js +49 -0
- package/dist/src/knowledge/capture-text.js.map +1 -0
- package/dist/src/knowledge/citation.d.ts +121 -0
- package/dist/src/knowledge/citation.d.ts.map +1 -0
- package/dist/src/knowledge/citation.js +252 -0
- package/dist/src/knowledge/citation.js.map +1 -0
- package/dist/src/knowledge/document-pipeline.d.ts +60 -0
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +188 -4
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/knowledge/html-extract.d.ts +43 -0
- package/dist/src/knowledge/html-extract.d.ts.map +1 -0
- package/dist/src/knowledge/html-extract.js +286 -0
- package/dist/src/knowledge/html-extract.js.map +1 -0
- package/dist/src/knowledge/html-tags.d.ts +30 -0
- package/dist/src/knowledge/html-tags.d.ts.map +1 -0
- package/dist/src/knowledge/html-tags.js +229 -0
- package/dist/src/knowledge/html-tags.js.map +1 -0
- package/dist/src/knowledge/library.d.ts +106 -0
- package/dist/src/knowledge/library.d.ts.map +1 -0
- package/dist/src/knowledge/library.js +195 -0
- package/dist/src/knowledge/library.js.map +1 -0
- package/dist/src/knowledge/mhtml.d.ts +60 -0
- package/dist/src/knowledge/mhtml.d.ts.map +1 -0
- package/dist/src/knowledge/mhtml.js +154 -0
- package/dist/src/knowledge/mhtml.js.map +1 -0
- package/dist/src/knowledge/related.d.ts +58 -0
- package/dist/src/knowledge/related.d.ts.map +1 -0
- package/dist/src/knowledge/related.js +222 -0
- package/dist/src/knowledge/related.js.map +1 -0
- package/dist/src/knowledge/section-diff.d.ts +48 -0
- package/dist/src/knowledge/section-diff.d.ts.map +1 -0
- package/dist/src/knowledge/section-diff.js +151 -0
- package/dist/src/knowledge/section-diff.js.map +1 -0
- package/dist/src/knowledge/watch.d.ts +92 -0
- package/dist/src/knowledge/watch.d.ts.map +1 -0
- package/dist/src/knowledge/watch.js +221 -0
- package/dist/src/knowledge/watch.js.map +1 -0
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +44 -87
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/browser-instrument-tools.d.ts +35 -0
- package/dist/src/mcp-tools/browser-instrument-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/browser-instrument-tools.js +359 -0
- package/dist/src/mcp-tools/browser-instrument-tools.js.map +1 -0
- package/dist/src/mcp-tools/browser-metrics.d.ts +42 -0
- package/dist/src/mcp-tools/browser-metrics.d.ts.map +1 -0
- package/dist/src/mcp-tools/browser-metrics.js +91 -0
- package/dist/src/mcp-tools/browser-metrics.js.map +1 -0
- package/dist/src/mcp-tools/browser-profile-tools.d.ts +16 -0
- package/dist/src/mcp-tools/browser-profile-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/browser-profile-tools.js +324 -0
- package/dist/src/mcp-tools/browser-profile-tools.js.map +1 -0
- package/dist/src/mcp-tools/browser-session.d.ts +68 -0
- package/dist/src/mcp-tools/browser-session.d.ts.map +1 -0
- package/dist/src/mcp-tools/browser-session.js +224 -0
- package/dist/src/mcp-tools/browser-session.js.map +1 -0
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +10 -176
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/capture-resource-read.d.ts +115 -0
- package/dist/src/mcp-tools/capture-resource-read.d.ts.map +1 -0
- package/dist/src/mcp-tools/capture-resource-read.js +296 -0
- package/dist/src/mcp-tools/capture-resource-read.js.map +1 -0
- package/dist/src/mcp-tools/capture-resource-tools.d.ts +22 -0
- package/dist/src/mcp-tools/capture-resource-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/capture-resource-tools.js +182 -0
- package/dist/src/mcp-tools/capture-resource-tools.js.map +1 -0
- package/dist/src/mcp-tools/capture-resources.d.ts +142 -0
- package/dist/src/mcp-tools/capture-resources.d.ts.map +1 -0
- package/dist/src/mcp-tools/capture-resources.js +289 -0
- package/dist/src/mcp-tools/capture-resources.js.map +1 -0
- package/dist/src/mcp-tools/index.d.ts +3 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +6 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.js +9 -1
- package/dist/src/mcp-tools/knowledge-tools.js.map +1 -1
- package/dist/src/mcp-tools/resource-router.d.ts +86 -0
- package/dist/src/mcp-tools/resource-router.d.ts.map +1 -0
- package/dist/src/mcp-tools/resource-router.js +181 -0
- package/dist/src/mcp-tools/resource-router.js.map +1 -0
- package/dist/src/memory/memory-bridge.js +1 -1
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/orgrt/agent-runner.d.ts +38 -0
- package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
- package/dist/src/orgrt/agent-runner.js +47 -0
- package/dist/src/orgrt/agent-runner.js.map +1 -1
- package/dist/src/orgrt/checkpoint.d.ts +12 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +15 -6
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/completion-gate.d.ts +74 -0
- package/dist/src/orgrt/completion-gate.d.ts.map +1 -1
- package/dist/src/orgrt/completion-gate.js +45 -0
- package/dist/src/orgrt/completion-gate.js.map +1 -1
- package/dist/src/orgrt/cost-tier.d.ts +144 -0
- package/dist/src/orgrt/cost-tier.d.ts.map +1 -0
- package/dist/src/orgrt/cost-tier.js +183 -0
- package/dist/src/orgrt/cost-tier.js.map +1 -0
- package/dist/src/orgrt/cross-org.d.ts.map +1 -1
- package/dist/src/orgrt/cross-org.js +14 -0
- package/dist/src/orgrt/cross-org.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +12 -1
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +216 -49
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +14 -2
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +216 -10
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/file-roots.d.ts +7 -0
- package/dist/src/orgrt/file-roots.d.ts.map +1 -1
- package/dist/src/orgrt/file-roots.js +38 -1
- package/dist/src/orgrt/file-roots.js.map +1 -1
- package/dist/src/orgrt/forwarder.d.ts.map +1 -1
- package/dist/src/orgrt/forwarder.js +16 -2
- package/dist/src/orgrt/forwarder.js.map +1 -1
- package/dist/src/orgrt/idle-deadline.d.ts +74 -1
- package/dist/src/orgrt/idle-deadline.d.ts.map +1 -1
- package/dist/src/orgrt/idle-deadline.js +52 -2
- package/dist/src/orgrt/idle-deadline.js.map +1 -1
- package/dist/src/orgrt/loadouts.d.ts +38 -0
- package/dist/src/orgrt/loadouts.d.ts.map +1 -0
- package/dist/src/orgrt/loadouts.js +129 -0
- package/dist/src/orgrt/loadouts.js.map +1 -0
- package/dist/src/orgrt/mailbox.d.ts +17 -1
- package/dist/src/orgrt/mailbox.d.ts.map +1 -1
- package/dist/src/orgrt/mailbox.js +50 -3
- package/dist/src/orgrt/mailbox.js.map +1 -1
- package/dist/src/orgrt/policy.d.ts +42 -2
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +53 -8
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/prompt-vars.d.ts +11 -0
- package/dist/src/orgrt/prompt-vars.d.ts.map +1 -0
- package/dist/src/orgrt/prompt-vars.js +49 -0
- package/dist/src/orgrt/prompt-vars.js.map +1 -0
- package/dist/src/orgrt/questions.d.ts +22 -1
- package/dist/src/orgrt/questions.d.ts.map +1 -1
- package/dist/src/orgrt/questions.js +24 -3
- package/dist/src/orgrt/questions.js.map +1 -1
- package/dist/src/orgrt/review-packet.d.ts +29 -0
- package/dist/src/orgrt/review-packet.d.ts.map +1 -0
- package/dist/src/orgrt/review-packet.js +67 -0
- package/dist/src/orgrt/review-packet.js.map +1 -0
- package/dist/src/orgrt/role-sandbox.d.ts.map +1 -1
- package/dist/src/orgrt/role-sandbox.js +16 -3
- package/dist/src/orgrt/role-sandbox.js.map +1 -1
- package/dist/src/orgrt/session-ledger.d.ts +68 -0
- package/dist/src/orgrt/session-ledger.d.ts.map +1 -0
- package/dist/src/orgrt/session-ledger.js +128 -0
- package/dist/src/orgrt/session-ledger.js.map +1 -0
- package/dist/src/orgrt/session.d.ts +45 -5
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +397 -27
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/task-dag.d.ts +34 -1
- package/dist/src/orgrt/task-dag.d.ts.map +1 -1
- package/dist/src/orgrt/task-dag.js +58 -7
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/orgrt/tool-spill.d.ts +94 -0
- package/dist/src/orgrt/tool-spill.d.ts.map +1 -0
- package/dist/src/orgrt/tool-spill.js +180 -0
- package/dist/src/orgrt/tool-spill.js.map +1 -0
- package/dist/src/orgrt/types.d.ts +138 -0
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +148 -0
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/platform-adapters/renderers/mcp.d.ts +20 -2
- package/dist/src/platform-adapters/renderers/mcp.d.ts.map +1 -1
- package/dist/src/platform-adapters/renderers/mcp.js +25 -5
- package/dist/src/platform-adapters/renderers/mcp.js.map +1 -1
- package/dist/src/protocol-capabilities.d.ts +2 -1
- package/dist/src/protocol-capabilities.d.ts.map +1 -1
- package/dist/src/protocol-capabilities.js +2 -1
- package/dist/src/protocol-capabilities.js.map +1 -1
- package/dist/src/ui/dashboard.html +450 -164
- package/dist/src/ui/org-hil.mjs +276 -0
- package/dist/src/ui/org-runtime.mjs +350 -0
- package/dist/src/ui/orgs.html +15 -4
- package/dist/src/ui/routes-org.mjs +290 -541
- package/dist/src/ui/server.mjs +25 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic diff between two versions of a captured page (RCL-08).
|
|
3
|
+
*
|
|
4
|
+
* A character diff of a re-captured page is noise: the byline date moved, an
|
|
5
|
+
* ad slot re-rendered, the markdown re-wrapped. What a watcher actually wants
|
|
6
|
+
* to be told is WHICH SECTIONS changed and roughly how much — "Pricing gained
|
|
7
|
+
* a paragraph, Changelog got three new entries, everything else is the same".
|
|
8
|
+
*
|
|
9
|
+
* So the unit here is the markdown section (heading + body), keyed by its
|
|
10
|
+
* full heading path, and the measure is words and sentences rather than
|
|
11
|
+
* characters. Sentences are also what gives a change its sample line: the
|
|
12
|
+
* first sentence that is in the new version and was not in the old one is the
|
|
13
|
+
* most useful single thing to print.
|
|
14
|
+
*
|
|
15
|
+
* No dependency, no LLM: heading paths and sentence sets are enough to say
|
|
16
|
+
* what moved.
|
|
17
|
+
*
|
|
18
|
+
* @module v1/cli/knowledge/section-diff
|
|
19
|
+
*/
|
|
20
|
+
const HEADING_RE = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
|
|
21
|
+
const INTRO_KEY = '(intro)';
|
|
22
|
+
/** Split markdown into sections keyed by heading path. Duplicate paths get a
|
|
23
|
+
* `#2` suffix so two "Notes" sections never collapse into one. */
|
|
24
|
+
export function splitSections(text) {
|
|
25
|
+
const lines = String(text ?? '').split('\n');
|
|
26
|
+
const stack = [];
|
|
27
|
+
const sections = [];
|
|
28
|
+
const seen = new Map();
|
|
29
|
+
let current = { key: INTRO_KEY, heading: INTRO_KEY, level: 0, body: '' };
|
|
30
|
+
const buffer = [];
|
|
31
|
+
const flush = () => {
|
|
32
|
+
current.body = buffer.join('\n').trim();
|
|
33
|
+
buffer.length = 0;
|
|
34
|
+
if (current.key !== INTRO_KEY || current.body)
|
|
35
|
+
sections.push(current);
|
|
36
|
+
};
|
|
37
|
+
let inFence = false;
|
|
38
|
+
for (const line of lines) {
|
|
39
|
+
if (/^\s{0,3}(`{3,}|~{3,})/.test(line))
|
|
40
|
+
inFence = !inFence;
|
|
41
|
+
const m = inFence ? null : HEADING_RE.exec(line);
|
|
42
|
+
if (!m) {
|
|
43
|
+
buffer.push(line);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
flush();
|
|
47
|
+
const level = m[1].length;
|
|
48
|
+
const heading = m[2].trim();
|
|
49
|
+
stack.length = Math.max(0, level - 1);
|
|
50
|
+
stack[level - 1] = heading;
|
|
51
|
+
let key = stack.filter(Boolean).join(' > ');
|
|
52
|
+
const n = (seen.get(key) ?? 0) + 1;
|
|
53
|
+
seen.set(key, n);
|
|
54
|
+
if (n > 1)
|
|
55
|
+
key = `${key} #${n}`;
|
|
56
|
+
current = { key, heading, level, body: '' };
|
|
57
|
+
}
|
|
58
|
+
flush();
|
|
59
|
+
return sections;
|
|
60
|
+
}
|
|
61
|
+
function words(text) {
|
|
62
|
+
return text.toLowerCase().match(/[\p{L}\p{N}][\p{L}\p{N}'’-]*/gu) ?? [];
|
|
63
|
+
}
|
|
64
|
+
function sentences(text) {
|
|
65
|
+
return text
|
|
66
|
+
.replace(/\s+/g, ' ')
|
|
67
|
+
.split(/(?<=[.!?])\s+/)
|
|
68
|
+
.map((s) => s.trim())
|
|
69
|
+
.filter((s) => s.length > 0);
|
|
70
|
+
}
|
|
71
|
+
/** Multiset difference: how many words the new body has that the old did not
|
|
72
|
+
* (and vice versa), so re-ordering a paragraph does not read as a rewrite. */
|
|
73
|
+
function wordDelta(oldBody, newBody) {
|
|
74
|
+
const counts = new Map();
|
|
75
|
+
for (const w of words(oldBody))
|
|
76
|
+
counts.set(w, (counts.get(w) ?? 0) + 1);
|
|
77
|
+
let added = 0;
|
|
78
|
+
for (const w of words(newBody)) {
|
|
79
|
+
const have = counts.get(w) ?? 0;
|
|
80
|
+
if (have > 0)
|
|
81
|
+
counts.set(w, have - 1);
|
|
82
|
+
else
|
|
83
|
+
added++;
|
|
84
|
+
}
|
|
85
|
+
let removed = 0;
|
|
86
|
+
for (const n of counts.values())
|
|
87
|
+
removed += n;
|
|
88
|
+
return { added, removed };
|
|
89
|
+
}
|
|
90
|
+
const SAMPLE_MAX = 160;
|
|
91
|
+
function firstNewSentence(oldBody, newBody) {
|
|
92
|
+
const before = new Set(sentences(oldBody));
|
|
93
|
+
for (const s of sentences(newBody)) {
|
|
94
|
+
if (before.has(s))
|
|
95
|
+
continue;
|
|
96
|
+
return s.length > SAMPLE_MAX ? `${s.slice(0, SAMPLE_MAX - 1)}…` : s;
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const SUMMARY_SECTIONS = 3;
|
|
101
|
+
function renderSummary(diff) {
|
|
102
|
+
const parts = [];
|
|
103
|
+
if (diff.changed.length)
|
|
104
|
+
parts.push(`${diff.changed.length} section(s) changed`);
|
|
105
|
+
if (diff.added.length)
|
|
106
|
+
parts.push(`${diff.added.length} added`);
|
|
107
|
+
if (diff.removed.length)
|
|
108
|
+
parts.push(`${diff.removed.length} removed`);
|
|
109
|
+
if (!parts.length)
|
|
110
|
+
return 'text changed, but no section did — formatting only';
|
|
111
|
+
const detail = [
|
|
112
|
+
...diff.changed
|
|
113
|
+
.slice(0, SUMMARY_SECTIONS)
|
|
114
|
+
.map((c) => `${c.key} (+${c.addedWords}/-${c.removedWords} words)`),
|
|
115
|
+
...diff.added.slice(0, SUMMARY_SECTIONS).map((k) => `+${k}`),
|
|
116
|
+
...diff.removed.slice(0, SUMMARY_SECTIONS).map((k) => `-${k}`),
|
|
117
|
+
];
|
|
118
|
+
return detail.length ? `${parts.join(', ')} — ${detail.join('; ')}` : parts.join(', ');
|
|
119
|
+
}
|
|
120
|
+
/** What changed between two versions of the same page. */
|
|
121
|
+
export function diffSections(oldText, newText) {
|
|
122
|
+
const before = new Map(splitSections(oldText).map((s) => [s.key, s]));
|
|
123
|
+
const after = new Map(splitSections(newText).map((s) => [s.key, s]));
|
|
124
|
+
const added = [];
|
|
125
|
+
const changed = [];
|
|
126
|
+
let unchanged = 0;
|
|
127
|
+
for (const [key, section] of after) {
|
|
128
|
+
const previous = before.get(key);
|
|
129
|
+
if (!previous) {
|
|
130
|
+
added.push(key);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (previous.body.replace(/\s+/g, ' ').trim() === section.body.replace(/\s+/g, ' ').trim()) {
|
|
134
|
+
unchanged++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const delta = wordDelta(previous.body, section.body);
|
|
138
|
+
changed.push({
|
|
139
|
+
key,
|
|
140
|
+
addedWords: delta.added,
|
|
141
|
+
removedWords: delta.removed,
|
|
142
|
+
...(firstNewSentence(previous.body, section.body)
|
|
143
|
+
? { sample: firstNewSentence(previous.body, section.body) }
|
|
144
|
+
: {}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const removed = [...before.keys()].filter((k) => !after.has(k));
|
|
148
|
+
const diff = { added, removed, changed, unchanged };
|
|
149
|
+
return { ...diff, summary: renderSummary(diff) };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=section-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-diff.js","sourceRoot":"","sources":["../../../src/knowledge/section-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch a captured page for change (RCL-08).
|
|
3
|
+
*
|
|
4
|
+
* WHAT THIS IS NOT: a scheduler, a daemon, or a fetcher. `checkWatches` is
|
|
5
|
+
* invoked by something else — mono-agent's scheduler drives it — and it does
|
|
6
|
+
* not touch the network. It re-reads what the pipeline already stored and
|
|
7
|
+
* compares content hashes, which is exactly the versioning RCL-06 put there.
|
|
8
|
+
* A re-capture is what makes a page "change"; this reports it.
|
|
9
|
+
*
|
|
10
|
+
* The watch list is a small JSON file next to the metadata log, keyed by the
|
|
11
|
+
* page's identity URL (or, for a local file, its path). Writes go through a
|
|
12
|
+
* temp file and a rename so a crashed check cannot leave a half-written list.
|
|
13
|
+
*
|
|
14
|
+
* @module v1/cli/knowledge/watch
|
|
15
|
+
*/
|
|
16
|
+
import { type SectionDiff } from './section-diff.js';
|
|
17
|
+
export declare const WATCH_FILE = "watches.json";
|
|
18
|
+
export declare const DEFAULT_INTERVAL_SECONDS = 86400;
|
|
19
|
+
export interface WatchEntry {
|
|
20
|
+
/** Identity: the capture's canonical URL, or an indexed file path. */
|
|
21
|
+
url: string;
|
|
22
|
+
scope: string;
|
|
23
|
+
intervalSeconds: number;
|
|
24
|
+
/** Content hash last seen by a check — the baseline the next one compares to. */
|
|
25
|
+
lastHash?: string;
|
|
26
|
+
lastCheckedAt?: string;
|
|
27
|
+
lastChangedAt?: string;
|
|
28
|
+
addedAt: string;
|
|
29
|
+
label?: string;
|
|
30
|
+
}
|
|
31
|
+
export type WatchStatus = 'changed' | 'unchanged' | 'new' | 'missing' | 'not-due';
|
|
32
|
+
export interface WatchCheck {
|
|
33
|
+
url: string;
|
|
34
|
+
scope: string;
|
|
35
|
+
status: WatchStatus;
|
|
36
|
+
checkedAt: string;
|
|
37
|
+
filePath?: string;
|
|
38
|
+
title?: string;
|
|
39
|
+
previousHash?: string;
|
|
40
|
+
currentHash?: string;
|
|
41
|
+
version?: number;
|
|
42
|
+
capturedAt?: string;
|
|
43
|
+
/** Present on `changed`, unless the previous version's file is gone. */
|
|
44
|
+
diff?: SectionDiff;
|
|
45
|
+
/** Why a change could not be summarized, when it could not. */
|
|
46
|
+
note?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface WatchCheckReport {
|
|
49
|
+
checked: number;
|
|
50
|
+
changed: number;
|
|
51
|
+
skipped: number;
|
|
52
|
+
results: WatchCheck[];
|
|
53
|
+
}
|
|
54
|
+
export declare function listWatches(rootDir: string): WatchEntry[];
|
|
55
|
+
/** `30m`, `6h`, `2d`, or bare seconds. Throws on a typo — a watch that
|
|
56
|
+
* silently defaulted to daily would look like it was working. */
|
|
57
|
+
export declare function parseInterval(value: string | number | undefined): number;
|
|
58
|
+
export interface AddWatchOptions {
|
|
59
|
+
interval?: string | number;
|
|
60
|
+
scope?: string;
|
|
61
|
+
label?: string;
|
|
62
|
+
now?: Date;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Watch `target` (a URL, a docId or an indexed path).
|
|
66
|
+
*
|
|
67
|
+
* The baseline is seeded from what is indexed RIGHT NOW, so the first check
|
|
68
|
+
* after adding reports nothing — a watch exists to catch the NEXT change, not
|
|
69
|
+
* to re-announce the capture that created it. Re-adding an existing watch
|
|
70
|
+
* updates its interval and label and keeps the baseline.
|
|
71
|
+
*/
|
|
72
|
+
export declare function addWatch(rootDir: string, target: string, opts?: AddWatchOptions): Promise<WatchEntry>;
|
|
73
|
+
/** Stop watching. Matches the stored identity URL, a docId, or a path. */
|
|
74
|
+
export declare function removeWatch(rootDir: string, target: string, scope?: string): boolean;
|
|
75
|
+
export interface CheckWatchesOptions {
|
|
76
|
+
scope?: string;
|
|
77
|
+
/** Check every watch regardless of its interval. */
|
|
78
|
+
force?: boolean;
|
|
79
|
+
/** Report without updating the stored baselines. */
|
|
80
|
+
dryRun?: boolean;
|
|
81
|
+
now?: Date;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Which watched pages have changed since the last check.
|
|
85
|
+
*
|
|
86
|
+
* Reads only what is already indexed: a page "changes" when a new capture of
|
|
87
|
+
* it was ingested under a new content hash. Each change carries a section-level
|
|
88
|
+
* summary (`diffSections`) built from the previous version's own archived
|
|
89
|
+
* file, or a note saying why it could not be built.
|
|
90
|
+
*/
|
|
91
|
+
export declare function checkWatches(rootDir: string, opts?: CheckWatchesOptions): Promise<WatchCheckReport>;
|
|
92
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/knowledge/watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAQD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAWzD;AAaD;kEACkE;AAClE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAQxE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,UAAU,CAAC,CA8BrB;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CASpF;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AA2BD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CA8E3B"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch a captured page for change (RCL-08).
|
|
3
|
+
*
|
|
4
|
+
* WHAT THIS IS NOT: a scheduler, a daemon, or a fetcher. `checkWatches` is
|
|
5
|
+
* invoked by something else — mono-agent's scheduler drives it — and it does
|
|
6
|
+
* not touch the network. It re-reads what the pipeline already stored and
|
|
7
|
+
* compares content hashes, which is exactly the versioning RCL-06 put there.
|
|
8
|
+
* A re-capture is what makes a page "change"; this reports it.
|
|
9
|
+
*
|
|
10
|
+
* The watch list is a small JSON file next to the metadata log, keyed by the
|
|
11
|
+
* page's identity URL (or, for a local file, its path). Writes go through a
|
|
12
|
+
* temp file and a rename so a crashed check cannot leave a half-written list.
|
|
13
|
+
*
|
|
14
|
+
* @module v1/cli/knowledge/watch
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'node:fs';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import { diffSections } from './section-diff.js';
|
|
19
|
+
export const WATCH_FILE = 'watches.json';
|
|
20
|
+
export const DEFAULT_INTERVAL_SECONDS = 86_400;
|
|
21
|
+
// ── Store ──────────────────────────────────────────────────────────
|
|
22
|
+
function watchPath(rootDir) {
|
|
23
|
+
return path.join(rootDir, '.monomind', 'knowledge', WATCH_FILE);
|
|
24
|
+
}
|
|
25
|
+
export function listWatches(rootDir) {
|
|
26
|
+
try {
|
|
27
|
+
const raw = fs.readFileSync(watchPath(rootDir), 'utf-8');
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
if (!Array.isArray(parsed))
|
|
30
|
+
return [];
|
|
31
|
+
return parsed.filter((w) => !!w && typeof w.url === 'string');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Absent, unreadable or corrupt: an empty watch list, never a thrown error
|
|
35
|
+
// in something a scheduler calls on a timer.
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function writeWatches(rootDir, entries) {
|
|
40
|
+
const file = watchPath(rootDir);
|
|
41
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
42
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
43
|
+
fs.writeFileSync(tmp, `${JSON.stringify(entries, null, 2)}\n`, 'utf-8');
|
|
44
|
+
fs.renameSync(tmp, file);
|
|
45
|
+
}
|
|
46
|
+
const INTERVAL_RE = /^(\d+(?:\.\d+)?)\s*(s|m|h|d|w)?$/i;
|
|
47
|
+
const INTERVAL_UNIT = { s: 1, m: 60, h: 3600, d: 86_400, w: 604_800 };
|
|
48
|
+
/** `30m`, `6h`, `2d`, or bare seconds. Throws on a typo — a watch that
|
|
49
|
+
* silently defaulted to daily would look like it was working. */
|
|
50
|
+
export function parseInterval(value) {
|
|
51
|
+
if (value === undefined || value === '')
|
|
52
|
+
return DEFAULT_INTERVAL_SECONDS;
|
|
53
|
+
const m = INTERVAL_RE.exec(String(value).trim());
|
|
54
|
+
if (!m)
|
|
55
|
+
throw new Error(`unparseable interval: ${value} (use 30m, 6h, 2d)`);
|
|
56
|
+
const seconds = Number(m[1]) * INTERVAL_UNIT[(m[2] ?? 's').toLowerCase()];
|
|
57
|
+
if (!Number.isFinite(seconds) || seconds <= 0)
|
|
58
|
+
throw new Error(`interval must be positive: ${value}`);
|
|
59
|
+
return Math.round(seconds);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Watch `target` (a URL, a docId or an indexed path).
|
|
63
|
+
*
|
|
64
|
+
* The baseline is seeded from what is indexed RIGHT NOW, so the first check
|
|
65
|
+
* after adding reports nothing — a watch exists to catch the NEXT change, not
|
|
66
|
+
* to re-announce the capture that created it. Re-adding an existing watch
|
|
67
|
+
* updates its interval and label and keeps the baseline.
|
|
68
|
+
*/
|
|
69
|
+
export async function addWatch(rootDir, target, opts = {}) {
|
|
70
|
+
const { findDocumentRecord } = await import('./document-pipeline.js');
|
|
71
|
+
const scope = opts.scope ?? 'shared';
|
|
72
|
+
const record = findDocumentRecord(rootDir, target, opts.scope);
|
|
73
|
+
const url = record?.canonicalUrl ?? record?.filePath ?? target;
|
|
74
|
+
const intervalSeconds = parseInterval(opts.interval);
|
|
75
|
+
const now = (opts.now ?? new Date()).toISOString();
|
|
76
|
+
const entries = listWatches(rootDir);
|
|
77
|
+
const existing = entries.find((w) => w.url === url && w.scope === scope);
|
|
78
|
+
if (existing) {
|
|
79
|
+
existing.intervalSeconds = intervalSeconds;
|
|
80
|
+
if (opts.label)
|
|
81
|
+
existing.label = opts.label;
|
|
82
|
+
writeWatches(rootDir, entries);
|
|
83
|
+
return existing;
|
|
84
|
+
}
|
|
85
|
+
const entry = {
|
|
86
|
+
url,
|
|
87
|
+
scope: record?.scope ?? scope,
|
|
88
|
+
intervalSeconds,
|
|
89
|
+
addedAt: now,
|
|
90
|
+
...(record?.contentHash ? { lastHash: record.contentHash, lastCheckedAt: now } : {}),
|
|
91
|
+
...((opts.label ?? record?.provenance?.title)
|
|
92
|
+
? { label: opts.label ?? record?.provenance?.title }
|
|
93
|
+
: {}),
|
|
94
|
+
};
|
|
95
|
+
entries.push(entry);
|
|
96
|
+
writeWatches(rootDir, entries);
|
|
97
|
+
return entry;
|
|
98
|
+
}
|
|
99
|
+
/** Stop watching. Matches the stored identity URL, a docId, or a path. */
|
|
100
|
+
export function removeWatch(rootDir, target, scope) {
|
|
101
|
+
const entries = listWatches(rootDir);
|
|
102
|
+
const wanted = new Set([target, path.resolve(target)]);
|
|
103
|
+
const kept = entries.filter((w) => !((wanted.has(w.url) || w.label === target) && (!scope || w.scope === scope)));
|
|
104
|
+
if (kept.length === entries.length)
|
|
105
|
+
return false;
|
|
106
|
+
writeWatches(rootDir, kept);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
function isDue(entry, now, force) {
|
|
110
|
+
if (force || !entry.lastCheckedAt)
|
|
111
|
+
return true;
|
|
112
|
+
const last = Date.parse(entry.lastCheckedAt);
|
|
113
|
+
if (Number.isNaN(last))
|
|
114
|
+
return true;
|
|
115
|
+
return now - last >= entry.intervalSeconds * 1000;
|
|
116
|
+
}
|
|
117
|
+
async function extractedText(filePath) {
|
|
118
|
+
try {
|
|
119
|
+
if (!fs.existsSync(filePath))
|
|
120
|
+
return null;
|
|
121
|
+
const { extractText } = await import('../capabilities/cap-documents.js');
|
|
122
|
+
const stat = fs.statSync(filePath);
|
|
123
|
+
return await extractText({
|
|
124
|
+
path: filePath,
|
|
125
|
+
absolutePath: filePath,
|
|
126
|
+
extension: path.extname(filePath).toLowerCase(),
|
|
127
|
+
size: stat.size,
|
|
128
|
+
modified: stat.mtime,
|
|
129
|
+
created: stat.birthtime,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Which watched pages have changed since the last check.
|
|
138
|
+
*
|
|
139
|
+
* Reads only what is already indexed: a page "changes" when a new capture of
|
|
140
|
+
* it was ingested under a new content hash. Each change carries a section-level
|
|
141
|
+
* summary (`diffSections`) built from the previous version's own archived
|
|
142
|
+
* file, or a note saying why it could not be built.
|
|
143
|
+
*/
|
|
144
|
+
export async function checkWatches(rootDir, opts = {}) {
|
|
145
|
+
const { findDocumentRecord, listDocumentVersions } = await import('./document-pipeline.js');
|
|
146
|
+
const entries = listWatches(rootDir);
|
|
147
|
+
const nowDate = opts.now ?? new Date();
|
|
148
|
+
const now = nowDate.getTime();
|
|
149
|
+
const checkedAt = nowDate.toISOString();
|
|
150
|
+
const results = [];
|
|
151
|
+
let changed = 0;
|
|
152
|
+
let skipped = 0;
|
|
153
|
+
let dirty = false;
|
|
154
|
+
for (const entry of entries) {
|
|
155
|
+
if (opts.scope && entry.scope !== opts.scope)
|
|
156
|
+
continue;
|
|
157
|
+
if (!isDue(entry, now, opts.force === true)) {
|
|
158
|
+
skipped++;
|
|
159
|
+
results.push({ url: entry.url, scope: entry.scope, status: 'not-due', checkedAt });
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const record = findDocumentRecord(rootDir, entry.url, entry.scope);
|
|
163
|
+
if (!record) {
|
|
164
|
+
results.push({
|
|
165
|
+
url: entry.url,
|
|
166
|
+
scope: entry.scope,
|
|
167
|
+
status: 'missing',
|
|
168
|
+
checkedAt,
|
|
169
|
+
note: 'nothing indexed under this URL — capture it, or remove the watch',
|
|
170
|
+
});
|
|
171
|
+
// Deliberately NOT stamping lastCheckedAt: a page that is not there yet
|
|
172
|
+
// should be looked at again on the next run, not put to sleep.
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const base = {
|
|
176
|
+
url: entry.url,
|
|
177
|
+
scope: entry.scope,
|
|
178
|
+
status: 'unchanged',
|
|
179
|
+
checkedAt,
|
|
180
|
+
filePath: record.filePath,
|
|
181
|
+
currentHash: record.contentHash,
|
|
182
|
+
...(entry.lastHash ? { previousHash: entry.lastHash } : {}),
|
|
183
|
+
...(record.version ? { version: record.version } : {}),
|
|
184
|
+
...(record.provenance?.title ? { title: record.provenance.title } : {}),
|
|
185
|
+
...(record.provenance?.capturedAt ? { capturedAt: record.provenance.capturedAt } : {}),
|
|
186
|
+
};
|
|
187
|
+
if (!entry.lastHash) {
|
|
188
|
+
results.push({ ...base, status: 'new' });
|
|
189
|
+
}
|
|
190
|
+
else if (entry.lastHash === record.contentHash) {
|
|
191
|
+
results.push(base);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
changed++;
|
|
195
|
+
const previous = listDocumentVersions(rootDir, entry.url, entry.scope).find((v) => v.contentHash === entry.lastHash);
|
|
196
|
+
const oldText = previous ? await extractedText(previous.filePath) : null;
|
|
197
|
+
const newText = await extractedText(record.filePath);
|
|
198
|
+
const check = { ...base, status: 'changed' };
|
|
199
|
+
if (oldText !== null && newText !== null) {
|
|
200
|
+
check.diff = diffSections(oldText, newText);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
check.note = previous
|
|
204
|
+
? `previous version's file is gone (${previous.filePath}) — change detected by hash only`
|
|
205
|
+
: 'no archived copy of the previous version — change detected by hash only';
|
|
206
|
+
}
|
|
207
|
+
results.push(check);
|
|
208
|
+
}
|
|
209
|
+
if (!opts.dryRun) {
|
|
210
|
+
if (entry.lastHash !== record.contentHash)
|
|
211
|
+
entry.lastChangedAt = checkedAt;
|
|
212
|
+
entry.lastHash = record.contentHash;
|
|
213
|
+
entry.lastCheckedAt = checkedAt;
|
|
214
|
+
dirty = true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (dirty && !opts.dryRun)
|
|
218
|
+
writeWatches(rootDir, entries);
|
|
219
|
+
return { checked: results.length - skipped, changed, skipped, results };
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/knowledge/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmC3C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAwCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEzE;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAO;IACzB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAC7C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAC,CAA6B;IAEhD,YAAY,OAAO,GAAE,gBAAqB,EAGzC;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,CA2CtC;IAED;;OAEG;IACG,IAAI,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DvC;IAED;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CAoE1C;IAED;;;;;;OAMG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACxF,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC,CAuCD;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAGxC;IAED;;;OAGG;YACW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"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"}
|