llmtxt 2026.4.0
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/CHANGELOG.md +66 -0
- package/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/cache.d.ts +155 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +193 -0
- package/dist/cache.js.map +1 -0
- package/dist/client.d.ts +80 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +143 -0
- package/dist/client.js.map +1 -0
- package/dist/compression.d.ts +9 -0
- package/dist/compression.d.ts.map +1 -0
- package/dist/compression.js +8 -0
- package/dist/compression.js.map +1 -0
- package/dist/disclosure.d.ts +215 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +532 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/graph.d.ts +76 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +137 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/patch.d.ts +8 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +8 -0
- package/dist/patch.js.map +1 -0
- package/dist/schemas.d.ts +290 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +154 -0
- package/dist/schemas.js.map +1 -0
- package/dist/sdk/attribution.d.ts +59 -0
- package/dist/sdk/attribution.d.ts.map +1 -0
- package/dist/sdk/attribution.js +99 -0
- package/dist/sdk/attribution.js.map +1 -0
- package/dist/sdk/consensus.d.ts +73 -0
- package/dist/sdk/consensus.d.ts.map +1 -0
- package/dist/sdk/consensus.js +110 -0
- package/dist/sdk/consensus.js.map +1 -0
- package/dist/sdk/document.d.ts +92 -0
- package/dist/sdk/document.d.ts.map +1 -0
- package/dist/sdk/document.js +182 -0
- package/dist/sdk/document.js.map +1 -0
- package/dist/sdk/index.d.ts +22 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +15 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/lifecycle.d.ts +66 -0
- package/dist/sdk/lifecycle.d.ts.map +1 -0
- package/dist/sdk/lifecycle.js +80 -0
- package/dist/sdk/lifecycle.js.map +1 -0
- package/dist/sdk/retrieval.d.ts +64 -0
- package/dist/sdk/retrieval.d.ts.map +1 -0
- package/dist/sdk/retrieval.js +102 -0
- package/dist/sdk/retrieval.js.map +1 -0
- package/dist/sdk/storage-adapter.d.ts +53 -0
- package/dist/sdk/storage-adapter.d.ts.map +1 -0
- package/dist/sdk/storage-adapter.js +2 -0
- package/dist/sdk/storage-adapter.js.map +1 -0
- package/dist/sdk/storage.d.ts +86 -0
- package/dist/sdk/storage.d.ts.map +1 -0
- package/dist/sdk/storage.js +69 -0
- package/dist/sdk/storage.js.map +1 -0
- package/dist/sdk/versions.d.ts +107 -0
- package/dist/sdk/versions.d.ts.map +1 -0
- package/dist/sdk/versions.js +129 -0
- package/dist/sdk/versions.js.map +1 -0
- package/dist/signed-url.d.ts +90 -0
- package/dist/signed-url.d.ts.map +1 -0
- package/dist/signed-url.js +159 -0
- package/dist/signed-url.js.map +1 -0
- package/dist/similarity.d.ts +57 -0
- package/dist/similarity.d.ts.map +1 -0
- package/dist/similarity.js +134 -0
- package/dist/similarity.js.map +1 -0
- package/dist/snapshot.d.ts +54 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +94 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/types.d.ts +92 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +146 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +285 -0
- package/dist/validation.js.map +1 -0
- package/dist/wasm.d.ts +28 -0
- package/dist/wasm.d.ts.map +1 -0
- package/dist/wasm.js +92 -0
- package/dist/wasm.js.map +1 -0
- package/package.json +98 -0
- package/wasm/LICENSE +21 -0
- package/wasm/README.md +63 -0
- package/wasm/llmtxt_core.d.ts +176 -0
- package/wasm/llmtxt_core.js +719 -0
- package/wasm/llmtxt_core_bg.wasm +0 -0
- package/wasm/llmtxt_core_bg.wasm.d.ts +37 -0
- package/wasm/package.json +25 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight llmtxt client for agents.
|
|
3
|
+
* Wraps the ClawMsgr attachment API with typed helpers.
|
|
4
|
+
* No framework dependencies — uses native fetch.
|
|
5
|
+
*
|
|
6
|
+
* When `@cleocode/lafs` is installed, responses are validated
|
|
7
|
+
* against the LAFS envelope schema. Without it, raw JSON is parsed directly.
|
|
8
|
+
*/
|
|
9
|
+
import { createPatch } from './patch.js';
|
|
10
|
+
// ── LAFS integration (optional) ─────────────────────────────────
|
|
11
|
+
/** Lazy-loaded LAFS parser. Cached after first resolution. */
|
|
12
|
+
let lafsParser;
|
|
13
|
+
/**
|
|
14
|
+
* Attempt to load parseLafsResponse from @cleocode/lafs.
|
|
15
|
+
* Returns the parser function, or false if LAFS is not installed.
|
|
16
|
+
*/
|
|
17
|
+
async function getLafsParser() {
|
|
18
|
+
if (lafsParser !== undefined)
|
|
19
|
+
return lafsParser;
|
|
20
|
+
try {
|
|
21
|
+
const lafs = await import('@cleocode/lafs');
|
|
22
|
+
lafsParser = lafs.parseLafsResponse;
|
|
23
|
+
return lafsParser;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
lafsParser = false;
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse a JSON response, using LAFS envelope validation when available.
|
|
32
|
+
*/
|
|
33
|
+
async function parseResponse(json) {
|
|
34
|
+
const envelope = json;
|
|
35
|
+
const parser = await getLafsParser();
|
|
36
|
+
if (parser && '$schema' in envelope) {
|
|
37
|
+
return parser(json);
|
|
38
|
+
}
|
|
39
|
+
if (envelope.success === false) {
|
|
40
|
+
const err = envelope.error;
|
|
41
|
+
throw new Error(err?.message ?? 'Request failed');
|
|
42
|
+
}
|
|
43
|
+
return (envelope.result ?? envelope.data);
|
|
44
|
+
}
|
|
45
|
+
// ── Client ──────────────────────────────────────────────────────
|
|
46
|
+
export function createClient(config) {
|
|
47
|
+
const headers = {
|
|
48
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
49
|
+
'X-Agent-Id': config.agentId,
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
/** Upload content as an attachment to a conversation. */
|
|
54
|
+
async upload(conversationId, content, options = {}) {
|
|
55
|
+
const { format = 'markdown', title, expiresIn = 3600 } = options;
|
|
56
|
+
const res = await fetch(`${config.apiBase}/conversations/${conversationId}/attachments`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers,
|
|
59
|
+
body: JSON.stringify({ content, format, title, expiresIn }),
|
|
60
|
+
});
|
|
61
|
+
if (!res.ok)
|
|
62
|
+
throw new Error(`Upload failed (${res.status}): ${await res.text()}`);
|
|
63
|
+
return parseResponse(await res.json());
|
|
64
|
+
},
|
|
65
|
+
/** Fetch content from a signed URL. */
|
|
66
|
+
async fetch(signedUrl) {
|
|
67
|
+
const res = await fetch(signedUrl, { headers });
|
|
68
|
+
if (!res.ok)
|
|
69
|
+
throw new Error(`Fetch failed (${res.status}): ${await res.text()}`);
|
|
70
|
+
return parseResponse(await res.json());
|
|
71
|
+
},
|
|
72
|
+
/** Fetch an attachment shared in a conversation without needing a signed URL. */
|
|
73
|
+
async fetchFromConversation(slug, conversationId) {
|
|
74
|
+
const url = new URL(`${config.apiBase}/attachments/${slug}`);
|
|
75
|
+
url.searchParams.set('conv', conversationId);
|
|
76
|
+
const res = await fetch(url, { headers });
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
throw new Error(`Conversation fetch failed (${res.status}): ${await res.text()}`);
|
|
79
|
+
}
|
|
80
|
+
return parseResponse(await res.json());
|
|
81
|
+
},
|
|
82
|
+
/** Fetch an attachment owned by the current agent. */
|
|
83
|
+
async fetchOwned(slug) {
|
|
84
|
+
const res = await fetch(`${config.apiBase}/attachments/${slug}`, { headers });
|
|
85
|
+
if (!res.ok)
|
|
86
|
+
throw new Error(`Owner fetch failed (${res.status}): ${await res.text()}`);
|
|
87
|
+
return parseResponse(await res.json());
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Change how an attachment is shared. For `signed_url` mode the API may
|
|
91
|
+
* return a fresh `signedUrl`; for `conversation`/`public` it may not.
|
|
92
|
+
*/
|
|
93
|
+
async reshare(slug, options = {}) {
|
|
94
|
+
const { expiresIn = 3600, mode = 'signed_url' } = options;
|
|
95
|
+
const res = await fetch(`${config.apiBase}/attachments/${slug}/reshare`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers,
|
|
98
|
+
body: JSON.stringify({ expiresIn, mode }),
|
|
99
|
+
});
|
|
100
|
+
if (!res.ok)
|
|
101
|
+
throw new Error(`Reshare failed (${res.status}): ${await res.text()}`);
|
|
102
|
+
return parseResponse(await res.json());
|
|
103
|
+
},
|
|
104
|
+
/** Backward-compatible alias for older API wording. Prefer `reshare`. */
|
|
105
|
+
async resign(slug, options = {}) {
|
|
106
|
+
return this.reshare(slug, options);
|
|
107
|
+
},
|
|
108
|
+
/** Build a version patch locally using the Rust/WASM core. */
|
|
109
|
+
createVersionPatch(original, updated) {
|
|
110
|
+
return createPatch(original, updated);
|
|
111
|
+
},
|
|
112
|
+
/** Submit a patch as the next version for an attachment slug. */
|
|
113
|
+
async addVersion(slug, patchText, options = {}) {
|
|
114
|
+
const res = await fetch(`${config.apiBase}/attachments/${slug}/versions`, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
headers,
|
|
117
|
+
body: JSON.stringify({ patchText, ...options }),
|
|
118
|
+
});
|
|
119
|
+
if (!res.ok)
|
|
120
|
+
throw new Error(`Add version failed (${res.status}): ${await res.text()}`);
|
|
121
|
+
return parseResponse(await res.json());
|
|
122
|
+
},
|
|
123
|
+
/** Convenience helper that diffs local content then appends the new version. */
|
|
124
|
+
async addVersionFromContent(slug, original, updated, options = {}) {
|
|
125
|
+
const patchText = createPatch(original, updated);
|
|
126
|
+
return this.addVersion(slug, patchText, options);
|
|
127
|
+
},
|
|
128
|
+
/** Check if a signed URL is still valid without fetching content. */
|
|
129
|
+
isValid(signedUrl) {
|
|
130
|
+
try {
|
|
131
|
+
const url = new URL(signedUrl);
|
|
132
|
+
const exp = url.searchParams.get('exp');
|
|
133
|
+
if (!exp)
|
|
134
|
+
return false;
|
|
135
|
+
return Date.now() < parseInt(exp, 10);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsDzC,mEAAmE;AAEnE,8DAA8D;AAC9D,IAAI,UAAgE,CAAC;AAErE;;;GAGG;AACH,KAAK,UAAU,aAAa;IAC1B,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAI,IAAa;IAC3C,MAAM,QAAQ,GAAG,IAA+B,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,MAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAM,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAA4C,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,OAAiB,IAAI,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAM,CAAC;AACjD,CAAC;AAED,mEAAmE;AAEnE,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;QACxC,YAAY,EAAE,MAAM,CAAC,OAAO;QAC5B,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,OAAO;QACL,yDAAyD;QACzD,KAAK,CAAC,MAAM,CACV,cAAsB,EACtB,OAAe,EACf,UAAmE,EAAE;YAErE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,kBAAkB,cAAc,cAAc,EAAE;gBACvF,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;aAC5D,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnF,OAAO,aAAa,CAAe,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,uCAAuC;QACvC,KAAK,CAAC,KAAK,CAAC,SAAiB;YAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClF,OAAO,aAAa,CAAc,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,iFAAiF;QACjF,KAAK,CAAC,qBAAqB,CAAC,IAAY,EAAE,cAAsB;YAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,aAAa,CAAc,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,sDAAsD;QACtD,KAAK,CAAC,UAAU,CAAC,IAAY;YAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,gBAAgB,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxF,OAAO,aAAa,CAAc,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED;;;WAGG;QACH,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,UAAoC,EAAE;YAEtC,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;YAC1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,gBAAgB,IAAI,UAAU,EAAE;gBACvE,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpF,OAAO,aAAa,CAAgB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,yEAAyE;QACzE,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,UAAoC,EAAE;YAEtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,8DAA8D;QAC9D,kBAAkB,CAAC,QAAgB,EAAE,OAAe;YAClD,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,iEAAiE;QACjE,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,SAAiB,EACjB,UAAoC,EAAE;YAEtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,gBAAgB,IAAI,WAAW,EAAE;gBACxE,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;aAChD,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxF,OAAO,aAAa,CAA0B,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,gFAAgF;QAChF,KAAK,CAAC,qBAAqB,CACzB,IAAY,EACZ,QAAgB,EAChB,OAAe,EACf,UAAoC,EAAE;YAEtC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,qEAAqE;QACrE,OAAO,CAAC,SAAiB;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAC;gBACvB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compression, encoding, hashing, and token estimation.
|
|
3
|
+
*
|
|
4
|
+
* All portable primitives delegate to the Rust WASM module — single
|
|
5
|
+
* source of truth, zero drift between TypeScript and Rust consumers.
|
|
6
|
+
*/
|
|
7
|
+
export { encodeBase62, decodeBase62, compress, decompress, generateId, hashContent, calculateTokens, calculateCompressionRatio, computeDiff, } from './wasm.js';
|
|
8
|
+
export type { DiffResult } from './wasm.js';
|
|
9
|
+
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../src/compression.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,yBAAyB,EACzB,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compression, encoding, hashing, and token estimation.
|
|
3
|
+
*
|
|
4
|
+
* All portable primitives delegate to the Rust WASM module — single
|
|
5
|
+
* source of truth, zero drift between TypeScript and Rust consumers.
|
|
6
|
+
*/
|
|
7
|
+
export { encodeBase62, decodeBase62, compress, decompress, generateId, hashContent, calculateTokens, calculateCompressionRatio, computeDiff, } from './wasm.js';
|
|
8
|
+
//# sourceMappingURL=compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.js","sourceRoot":"","sources":["../src/compression.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,yBAAyB,EACzB,WAAW,GACZ,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A logical section identified within a document.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Sections are detected by format-specific heuristics (headings in
|
|
6
|
+
* markdown, top-level keys in JSON, function/class declarations in code).
|
|
7
|
+
*/
|
|
8
|
+
export interface Section {
|
|
9
|
+
/** Display title of the section (heading text, JSON key, or symbol name). */
|
|
10
|
+
title: string;
|
|
11
|
+
/** Nesting depth (0-based). Headings use depth = level - 1. */
|
|
12
|
+
depth: number;
|
|
13
|
+
/** 1-based line number where the section begins. */
|
|
14
|
+
startLine: number;
|
|
15
|
+
/** 1-based line number where the section ends (inclusive). */
|
|
16
|
+
endLine: number;
|
|
17
|
+
/** Estimated token count for the section content. */
|
|
18
|
+
tokenCount: number;
|
|
19
|
+
/** The structural type of the section. */
|
|
20
|
+
type: 'heading' | 'json-key' | 'code-block' | 'function' | 'class';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* High-level structural overview of a document.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Produced by {@link generateOverview}. Provides format detection,
|
|
27
|
+
* token counts, section listings, and format-specific extras (JSON keys
|
|
28
|
+
* or a markdown table of contents).
|
|
29
|
+
*/
|
|
30
|
+
export interface DocumentOverview {
|
|
31
|
+
/** The detected document format. */
|
|
32
|
+
format: 'json' | 'markdown' | 'code' | 'text';
|
|
33
|
+
/** Total number of lines in the document. */
|
|
34
|
+
lineCount: number;
|
|
35
|
+
/** Estimated total token count for the entire document. */
|
|
36
|
+
tokenCount: number;
|
|
37
|
+
/** Ordered list of sections found in the document. */
|
|
38
|
+
sections: Section[];
|
|
39
|
+
/** Top-level JSON keys with type info and preview (JSON documents only). */
|
|
40
|
+
keys?: Array<{
|
|
41
|
+
key: string;
|
|
42
|
+
type: string;
|
|
43
|
+
preview: string;
|
|
44
|
+
}>;
|
|
45
|
+
/** Markdown table of contents entries (markdown documents only). */
|
|
46
|
+
toc?: Array<{
|
|
47
|
+
title: string;
|
|
48
|
+
depth: number;
|
|
49
|
+
line: number;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A single match returned by {@link searchContent}.
|
|
54
|
+
*/
|
|
55
|
+
export interface SearchResult {
|
|
56
|
+
/** 1-based line number of the matching line. */
|
|
57
|
+
line: number;
|
|
58
|
+
/** The full text of the matching line. */
|
|
59
|
+
content: string;
|
|
60
|
+
/** Lines immediately preceding the match (up to `contextLines`). */
|
|
61
|
+
contextBefore: string[];
|
|
62
|
+
/** Lines immediately following the match (up to `contextLines`). */
|
|
63
|
+
contextAfter: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Result of extracting a line range from a document via {@link getLineRange}.
|
|
67
|
+
*/
|
|
68
|
+
export interface LineRangeResult {
|
|
69
|
+
/** 1-based line number where the extracted range begins. */
|
|
70
|
+
startLine: number;
|
|
71
|
+
/** 1-based line number where the extracted range ends (inclusive). */
|
|
72
|
+
endLine: number;
|
|
73
|
+
/** The extracted text content for the requested line range. */
|
|
74
|
+
content: string;
|
|
75
|
+
/** Estimated token count for the extracted content. */
|
|
76
|
+
tokenCount: number;
|
|
77
|
+
/** Total number of lines in the full document. */
|
|
78
|
+
totalLines: number;
|
|
79
|
+
/** Estimated total token count for the full document. */
|
|
80
|
+
totalTokens: number;
|
|
81
|
+
/** Number of tokens saved by extracting only this range. */
|
|
82
|
+
tokensSaved: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extract a range of lines from a document, returning content and token statistics.
|
|
86
|
+
*
|
|
87
|
+
* @remarks
|
|
88
|
+
* Line numbers are 1-based and clamped to the document boundaries. This
|
|
89
|
+
* enables agents to request only the portion of a document they need,
|
|
90
|
+
* reducing token consumption.
|
|
91
|
+
*
|
|
92
|
+
* @param content - The full document content.
|
|
93
|
+
* @param start - The 1-based starting line number.
|
|
94
|
+
* @param end - The 1-based ending line number (inclusive).
|
|
95
|
+
* @returns A {@link LineRangeResult} with the extracted content and token savings.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* const range = getLineRange(doc, 10, 25);
|
|
100
|
+
* console.log(`Saved ${range.tokensSaved} tokens`);
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export declare function getLineRange(content: string, start: number, end: number): LineRangeResult;
|
|
104
|
+
/**
|
|
105
|
+
* Search document content for lines matching a query string or regex.
|
|
106
|
+
*
|
|
107
|
+
* @remarks
|
|
108
|
+
* Supports plain-text substring matching (case-insensitive) and regex
|
|
109
|
+
* patterns delimited with slashes (e.g. `/pattern/i`). Results include
|
|
110
|
+
* configurable surrounding context lines to help agents understand each
|
|
111
|
+
* match in context.
|
|
112
|
+
*
|
|
113
|
+
* @param content - The full document content to search.
|
|
114
|
+
* @param query - A plain-text substring or `/regex/flags` pattern.
|
|
115
|
+
* @param contextLines - Number of context lines before and after each match (default: 2).
|
|
116
|
+
* @param maxResults - Maximum number of matches to return (default: 20).
|
|
117
|
+
* @returns An array of {@link SearchResult} objects for each matching line.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* const hits = searchContent(doc, 'TODO', 3, 10);
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function searchContent(content: string, query: string, contextLines?: number, maxResults?: number): SearchResult[];
|
|
125
|
+
/**
|
|
126
|
+
* Detect the structural format of a document using content heuristics.
|
|
127
|
+
*
|
|
128
|
+
* @remarks
|
|
129
|
+
* Applies the following precedence: JSON (valid `JSON.parse`), then
|
|
130
|
+
* markdown (2+ markdown signals such as headings, lists, or links), then
|
|
131
|
+
* code (2+ code signals such as `import`, `function`, or arrow syntax),
|
|
132
|
+
* and finally falls back to plain text.
|
|
133
|
+
*
|
|
134
|
+
* @param content - The document content to classify.
|
|
135
|
+
* @returns The detected format: `"json"`, `"markdown"`, `"code"`, or `"text"`.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* detectDocumentFormat('# Title\n- item'); // "markdown"
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare function detectDocumentFormat(content: string): 'json' | 'markdown' | 'code' | 'text';
|
|
143
|
+
/**
|
|
144
|
+
* Generate a structural overview of a document for progressive disclosure.
|
|
145
|
+
*
|
|
146
|
+
* @remarks
|
|
147
|
+
* Detects the document format, splits it into logical sections, computes
|
|
148
|
+
* token counts, and extracts format-specific metadata (JSON keys or
|
|
149
|
+
* markdown table of contents). The overview allows agents to decide
|
|
150
|
+
* which sections to request in full, minimizing total token usage.
|
|
151
|
+
*
|
|
152
|
+
* @param content - The full document content to analyze.
|
|
153
|
+
* @returns A {@link DocumentOverview} with format, sections, and token counts.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* const overview = generateOverview(markdownDoc);
|
|
158
|
+
* console.log(`${overview.sections.length} sections, ${overview.tokenCount} tokens`);
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare function generateOverview(content: string): DocumentOverview;
|
|
162
|
+
/**
|
|
163
|
+
* Execute a JSONPath-style query against JSON content.
|
|
164
|
+
*
|
|
165
|
+
* @remarks
|
|
166
|
+
* Parses the content as JSON and resolves the dot/bracket path (e.g.
|
|
167
|
+
* `$.messages[0].content` or `data.items`). Supports wildcard (`*`) for
|
|
168
|
+
* arrays and objects. Throws on invalid JSON or missing keys to provide
|
|
169
|
+
* clear error messages to calling agents.
|
|
170
|
+
*
|
|
171
|
+
* @param content - A valid JSON string to query.
|
|
172
|
+
* @param path - A JSONPath expression (e.g. `"$.key"`, `"items[0].name"`).
|
|
173
|
+
* @returns An object containing the resolved `result`, its `tokenCount`, and the original `path`.
|
|
174
|
+
* @throws Error if the JSON is invalid or the path cannot be resolved.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```ts
|
|
178
|
+
* const { result } = queryJsonPath('{"a":{"b":42}}', '$.a.b');
|
|
179
|
+
* // result === 42
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export declare function queryJsonPath(content: string, path: string): {
|
|
183
|
+
result: unknown;
|
|
184
|
+
tokenCount: number;
|
|
185
|
+
path: string;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Extract a named section from a document by title.
|
|
189
|
+
*
|
|
190
|
+
* @remarks
|
|
191
|
+
* Searches the document's sections (from {@link generateOverview}) for a
|
|
192
|
+
* matching title using progressively looser comparisons: exact match,
|
|
193
|
+
* substring match, and alphanumeric-only substring match. When
|
|
194
|
+
* `depthAll` is `true`, child sections at deeper nesting levels are
|
|
195
|
+
* included in the extracted content.
|
|
196
|
+
*
|
|
197
|
+
* @param content - The full document content.
|
|
198
|
+
* @param sectionName - The section title (or substring) to search for.
|
|
199
|
+
* @param depthAll - When `true`, include all child sections nested under the match (default: `false`).
|
|
200
|
+
* @returns An object with the matched section, extracted content, and token savings, or `null` if not found.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```ts
|
|
204
|
+
* const section = getSection(doc, 'Installation', true);
|
|
205
|
+
* if (section) console.log(section.content);
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export declare function getSection(content: string, sectionName: string, depthAll?: boolean): {
|
|
209
|
+
section: Section;
|
|
210
|
+
content: string;
|
|
211
|
+
tokenCount: number;
|
|
212
|
+
totalTokens: number;
|
|
213
|
+
tokensSaved: number;
|
|
214
|
+
} | null;
|
|
215
|
+
//# sourceMappingURL=disclosure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"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"}
|