@vibe-agent-toolkit/resources 0.1.39-rc.13 → 0.1.39-rc.14
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/dist/content-cache.d.ts +67 -0
- package/dist/content-cache.d.ts.map +1 -0
- package/dist/content-cache.js +160 -0
- package/dist/content-cache.js.map +1 -0
- package/dist/external-link-cache.d.ts +16 -2
- package/dist/external-link-cache.d.ts.map +1 -1
- package/dist/external-link-cache.js +43 -13
- package/dist/external-link-cache.js.map +1 -1
- package/dist/external-link-validator.d.ts +75 -2
- package/dist/external-link-validator.d.ts.map +1 -1
- package/dist/external-link-validator.js +184 -4
- package/dist/external-link-validator.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/link-auth-classify.d.ts +34 -0
- package/dist/link-auth-classify.d.ts.map +1 -0
- package/dist/link-auth-classify.js +42 -0
- package/dist/link-auth-classify.js.map +1 -0
- package/dist/link-auth-config-build.d.ts +47 -0
- package/dist/link-auth-config-build.d.ts.map +1 -0
- package/dist/link-auth-config-build.js +86 -0
- package/dist/link-auth-config-build.js.map +1 -0
- package/dist/link-auth-content-fetch.d.ts +75 -0
- package/dist/link-auth-content-fetch.d.ts.map +1 -0
- package/dist/link-auth-content-fetch.js +101 -0
- package/dist/link-auth-content-fetch.js.map +1 -0
- package/dist/link-auth-deps-memo.d.ts +40 -0
- package/dist/link-auth-deps-memo.d.ts.map +1 -0
- package/dist/link-auth-deps-memo.js +47 -0
- package/dist/link-auth-deps-memo.js.map +1 -0
- package/dist/link-auth-transport.d.ts +44 -0
- package/dist/link-auth-transport.d.ts.map +1 -0
- package/dist/link-auth-transport.js +151 -0
- package/dist/link-auth-transport.js.map +1 -0
- package/dist/resource-registry.d.ts.map +1 -1
- package/dist/resource-registry.js +15 -1
- package/dist/resource-registry.js.map +1 -1
- package/dist/schemas/link-auth.d.ts +1049 -303
- package/dist/schemas/link-auth.d.ts.map +1 -1
- package/dist/schemas/link-auth.js +39 -20
- package/dist/schemas/link-auth.js.map +1 -1
- package/dist/schemas/project-config.d.ts +2697 -749
- package/dist/schemas/project-config.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/content-cache.ts +190 -0
- package/src/external-link-cache.ts +50 -13
- package/src/external-link-validator.ts +268 -5
- package/src/index.ts +23 -0
- package/src/link-auth-classify.ts +61 -0
- package/src/link-auth-config-build.ts +130 -0
- package/src/link-auth-content-fetch.ts +146 -0
- package/src/link-auth-deps-memo.ts +56 -0
- package/src/link-auth-transport.ts +179 -0
- package/src/resource-registry.ts +17 -2
- package/src/schemas/link-auth.ts +47 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/schemas/project-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/schemas/project-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,qCAC+B,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;EASY,CAAC;AAErD,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaiB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO6B,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAqFV,CAAC;;;iBAEV,CAAC;mBACJ,CAAC;;;;;;;mBAkEqC,CAAA;;;;;;iBAwElC,CAAC;mBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAxEP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwElC,CAAC;mBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAvNA,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;EAGrC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;EAG5C,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAkB/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAM2C,CAAC;AAEpF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B3B;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOyD,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBApDf,CAAC;;;iBAEV,CAAC;mBACJ,CAAC;;;;;;;mBAkEqC,CAAA;;;;;;iBAwElC,CAAC;mBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAhHvD;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkC6C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwElC,CAAC;mBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA1EJ,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA9EP,CAAC;;;qBAEV,CAAC;uBACJ,CAAC;;;;;;;uBAkEqC,CAAA;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAhHvD;;;;;;eAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAkC6C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA7IjC,CAAC;;;qBAEV,CAAC;uBACJ,CAAC;;;;;;;uBAkEqC,CAAA;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAhHvD;;;;;;eAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAkC6C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAxEP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAzC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA1DW,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAM9D;;;;;;;;GAQG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBwB,CAAC;AAExE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F;;;GAGG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;EAa+B,CAAC;AAE3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAciC,CAAC;AAEtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK8B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAnLR,CAAC;;;yBAEV,CAAC;2BACJ,CAAC;;;;;;;2BAkEqC,CAAA;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAhHvD;;;;;;mBAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAkC6C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA7IjC,CAAC;;;yBAEV,CAAC;2BACJ,CAAC;;;;;;;2BAkEqC,CAAA;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAhHvD;;;;;;mBAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAkC6C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAxEP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAzC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA7IjC,CAAC;;;qBAEV,CAAC;uBACJ,CAAC;;;;;;;uBAkEqC,CAAA;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAxEP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwElC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAxEP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAwElC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAzC,CAAC;2BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAzC,CAAC;uBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CO,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/resources",
|
|
3
|
-
"version": "0.1.39-rc.
|
|
3
|
+
"version": "0.1.39-rc.14",
|
|
4
4
|
"description": "Markdown resource parsing, validation, and link integrity checking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -33,13 +33,13 @@
|
|
|
33
33
|
"author": "Jeff Dutton",
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vibe-agent-toolkit/agent-schema": "0.1.39-rc.
|
|
37
|
-
"@vibe-agent-toolkit/utils": "0.1.39-rc.
|
|
36
|
+
"@vibe-agent-toolkit/agent-schema": "0.1.39-rc.14",
|
|
37
|
+
"@vibe-agent-toolkit/utils": "0.1.39-rc.14",
|
|
38
38
|
"ajv": "^8.17.1",
|
|
39
39
|
"ajv-formats": "^3.0.1",
|
|
40
40
|
"github-slugger": "^2.0.0",
|
|
41
41
|
"markdown-link-check": "^3.14.2",
|
|
42
|
-
"parse5": "^7.
|
|
42
|
+
"parse5": "^7.3.0",
|
|
43
43
|
"picomatch": "^4.0.3",
|
|
44
44
|
"remark-frontmatter": "^5.0.0",
|
|
45
45
|
"remark-gfm": "^4.0.0",
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-entry content cache for the linkAuth content-fetch primitive (design
|
|
3
|
+
* issue #113 §6.2 + §6.3).
|
|
4
|
+
*
|
|
5
|
+
* Layout: under `cacheDir/` each entry is two files keyed by `sha256(url).hex`:
|
|
6
|
+
* - `<hash>.json` — metadata (status, content-type, etag/last-modified,
|
|
7
|
+
* fetchedAt, rewrittenUrl, schema version)
|
|
8
|
+
* - `<hash>.bin` — raw response bytes, binary-clean
|
|
9
|
+
*
|
|
10
|
+
* The split lets one entry read load only what we need: metadata for the
|
|
11
|
+
* TTL/version check, then the bytes only on a hit. A single-JSON layout would
|
|
12
|
+
* have meant base64-encoding bytes (~33% bloat) and reparsing every entry on
|
|
13
|
+
* every lookup. Two-file layout pays one extra `open()` per hit and scales
|
|
14
|
+
* better as content size grows.
|
|
15
|
+
*
|
|
16
|
+
* **Cross-user isolation is the caller's job** (§6.3) — pass a cacheDir
|
|
17
|
+
* already scoped to the OS user (e.g. `<cacheDir>/content/auth-<osUser>/`).
|
|
18
|
+
* The cache class itself only knows about the directory it was given.
|
|
19
|
+
*
|
|
20
|
+
* **TTL** defaults to 30 minutes per §6.3. The content-fetch primitive's
|
|
21
|
+
* `forceRefresh` option bypasses the cache; this class has no `clear()` —
|
|
22
|
+
* stale entries fall out naturally on TTL expiry, and `forceRefresh` covers
|
|
23
|
+
* "I authenticated as the wrong identity" per §6.3.
|
|
24
|
+
*
|
|
25
|
+
* **Fail-soft IO** per #125 review: ENOENT/EACCES/EROFS/corrupted-JSON all
|
|
26
|
+
* degrade to a miss (for reads) or a no-op (for writes). A non-persisted
|
|
27
|
+
* entry costs an extra fetch on the next run; an exception costs the whole
|
|
28
|
+
* current run.
|
|
29
|
+
*
|
|
30
|
+
* **Strict metadata shape**: `set()` writes only declared `ContentMetadata`
|
|
31
|
+
* fields, even if the caller passes structurally-typed extras. The fetch
|
|
32
|
+
* primitive is the authority on what may be persisted, and a cache that
|
|
33
|
+
* silently passes through unknown fields could leak a token value if the
|
|
34
|
+
* primitive (or future code) ever forgot.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
import { createHash } from 'node:crypto';
|
|
38
|
+
import { promises as fs } from 'node:fs';
|
|
39
|
+
|
|
40
|
+
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Cache schema version. Bump when `ContentMetadata` or the on-disk layout
|
|
44
|
+
* changes. Entries with a missing or non-matching version are read as a miss
|
|
45
|
+
* (rather than misparsed) — the next fetch repopulates them under the new
|
|
46
|
+
* schema.
|
|
47
|
+
*/
|
|
48
|
+
const CACHE_VERSION = 1;
|
|
49
|
+
|
|
50
|
+
const DEFAULT_TTL_MINUTES = 30;
|
|
51
|
+
|
|
52
|
+
export interface ContentMetadata {
|
|
53
|
+
readonly status: number;
|
|
54
|
+
readonly contentType: string | null;
|
|
55
|
+
readonly etag: string | null;
|
|
56
|
+
readonly lastModified: string | null;
|
|
57
|
+
/** Epoch ms when the response was received (used for TTL evaluation). */
|
|
58
|
+
readonly fetchedAt: number;
|
|
59
|
+
/** The rewritten URL the bytes were fetched from (§6.3 cache-key discipline). */
|
|
60
|
+
readonly rewrittenUrl: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface ContentCacheEntry {
|
|
64
|
+
readonly bytes: Uint8Array;
|
|
65
|
+
readonly metadata: ContentMetadata;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
interface StoredMetadata extends ContentMetadata {
|
|
69
|
+
readonly version: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export class ContentCache {
|
|
73
|
+
private readonly cacheDir: string;
|
|
74
|
+
private readonly ttlMs: number;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param cacheDir - Already-OS-user-scoped directory for entries. Caller
|
|
78
|
+
* builds this; the class does not know about users or scoping.
|
|
79
|
+
* @param ttlMinutes - Time-to-live in minutes. Defaults to the §6.3 30-min
|
|
80
|
+
* "session" window.
|
|
81
|
+
*/
|
|
82
|
+
constructor(cacheDir: string, ttlMinutes: number = DEFAULT_TTL_MINUTES) {
|
|
83
|
+
this.cacheDir = cacheDir;
|
|
84
|
+
this.ttlMs = ttlMinutes * 60 * 1000;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async get(url: string): Promise<ContentCacheEntry | null> {
|
|
88
|
+
const key = this.keyFor(url);
|
|
89
|
+
const jsonPath = safePath.join(this.cacheDir, `${key}.json`);
|
|
90
|
+
const binPath = safePath.join(this.cacheDir, `${key}.bin`);
|
|
91
|
+
|
|
92
|
+
const stored = await this.readMetadata(jsonPath);
|
|
93
|
+
if (stored === null) return null;
|
|
94
|
+
if (stored.version !== CACHE_VERSION) return null;
|
|
95
|
+
if (this.isExpired(stored)) return null;
|
|
96
|
+
|
|
97
|
+
const bytes = await this.readBytes(binPath);
|
|
98
|
+
if (bytes === null) return null;
|
|
99
|
+
|
|
100
|
+
// Strip the version field — that is an on-disk concern, not part of
|
|
101
|
+
// the caller-facing `ContentMetadata` contract.
|
|
102
|
+
return {
|
|
103
|
+
bytes,
|
|
104
|
+
metadata: pickMetadata(stored),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async set(url: string, bytes: Uint8Array, metadata: ContentMetadata): Promise<void> {
|
|
109
|
+
const key = this.keyFor(url);
|
|
110
|
+
const jsonPath = safePath.join(this.cacheDir, `${key}.json`);
|
|
111
|
+
const binPath = safePath.join(this.cacheDir, `${key}.bin`);
|
|
112
|
+
|
|
113
|
+
// Whitelist exactly the declared ContentMetadata fields — defense in depth
|
|
114
|
+
// against a caller that smuggles extra structurally-typed fields, so a
|
|
115
|
+
// future regression in the primitive cannot accidentally persist a token
|
|
116
|
+
// through this cache.
|
|
117
|
+
const stored: StoredMetadata = { ...pickMetadata(metadata), version: CACHE_VERSION };
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheDir is constructor parameter, controlled by caller
|
|
121
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
122
|
+
// Write order matters: .bin first, then .json. The reader checks .json
|
|
123
|
+
// first (version + TTL); a partially-written entry where .bin lands but
|
|
124
|
+
// .json doesn't reads as a miss (no .json). The hazard we are avoiding
|
|
125
|
+
// is the reverse — a fresh .json with a stale .bin from a prior set()
|
|
126
|
+
// for the same URL would serve old bytes under new metadata. Writing
|
|
127
|
+
// .json second guarantees that whenever .json reflects the new entry,
|
|
128
|
+
// .bin already does too.
|
|
129
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- binPath derived from cacheDir
|
|
130
|
+
await fs.writeFile(binPath, Buffer.from(bytes));
|
|
131
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- jsonPath derived from cacheDir
|
|
132
|
+
await fs.writeFile(jsonPath, JSON.stringify(stored), 'utf-8');
|
|
133
|
+
} catch {
|
|
134
|
+
// Fail-soft per #125 review: a write IO failure (EACCES on the dir,
|
|
135
|
+
// ENOSPC on the disk, EROFS on read-only mounts) becomes a no-op. The
|
|
136
|
+
// current run still has the fresh bytes; only the disk persistence is
|
|
137
|
+
// lost.
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private keyFor(url: string): string {
|
|
142
|
+
return createHash('sha256').update(url).digest('hex');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private isExpired(stored: StoredMetadata): boolean {
|
|
146
|
+
return Date.now() - stored.fetchedAt > this.ttlMs;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private async readMetadata(jsonPath: string): Promise<StoredMetadata | null> {
|
|
150
|
+
try {
|
|
151
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- jsonPath derived from cacheDir
|
|
152
|
+
const raw = await fs.readFile(jsonPath, 'utf-8');
|
|
153
|
+
return JSON.parse(raw) as StoredMetadata;
|
|
154
|
+
} catch {
|
|
155
|
+
// ENOENT (never written), EACCES (perms revoked), SyntaxError
|
|
156
|
+
// (corrupted JSON) — all degrade to a miss. The next fetch repopulates.
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private async readBytes(binPath: string): Promise<Uint8Array | null> {
|
|
162
|
+
try {
|
|
163
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- binPath derived from cacheDir
|
|
164
|
+
const buf = await fs.readFile(binPath);
|
|
165
|
+
// Return a fresh Uint8Array view that does not alias the Node Buffer's
|
|
166
|
+
// underlying ArrayBuffer slab — callers may mutate or store the bytes.
|
|
167
|
+
return new Uint8Array(buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength));
|
|
168
|
+
} catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Single source of truth for the on-disk metadata field list. Used in both
|
|
176
|
+
* `set()` (whitelist before write — strips smuggled fields, including the
|
|
177
|
+
* `version` field on round-trip) and `get()` (drop the `version` field before
|
|
178
|
+
* returning to the caller). Centralizing the list means future §8 audits
|
|
179
|
+
* only need to inspect one place.
|
|
180
|
+
*/
|
|
181
|
+
function pickMetadata(source: ContentMetadata): ContentMetadata {
|
|
182
|
+
return {
|
|
183
|
+
status: source.status,
|
|
184
|
+
contentType: source.contentType,
|
|
185
|
+
etag: source.etag,
|
|
186
|
+
lastModified: source.lastModified,
|
|
187
|
+
fetchedAt: source.fetchedAt,
|
|
188
|
+
rewrittenUrl: source.rewrittenUrl,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
@@ -3,6 +3,14 @@ import { promises as fs } from 'node:fs';
|
|
|
3
3
|
|
|
4
4
|
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Cache schema version. Incremented when CacheEntry shape changes; entries
|
|
8
|
+
* written by an older code path that read as a different version are treated
|
|
9
|
+
* as cache misses (rather than misparsed) — forward-compat for slice 3's
|
|
10
|
+
* content-cache additions and any future entry-shape evolution.
|
|
11
|
+
*/
|
|
12
|
+
const CACHE_VERSION = 1;
|
|
13
|
+
|
|
6
14
|
/**
|
|
7
15
|
* Cache entry for external link validation results
|
|
8
16
|
*/
|
|
@@ -10,6 +18,12 @@ interface CacheEntry {
|
|
|
10
18
|
statusCode: number;
|
|
11
19
|
statusMessage: string;
|
|
12
20
|
timestamp: number;
|
|
21
|
+
/**
|
|
22
|
+
* Schema version. Optional for backwards-compat: legacy entries without
|
|
23
|
+
* `version` are treated as a cache miss, forcing a refetch. Reading on
|
|
24
|
+
* version mismatch produces a miss rather than a parse error.
|
|
25
|
+
*/
|
|
26
|
+
version?: number;
|
|
13
27
|
}
|
|
14
28
|
|
|
15
29
|
/**
|
|
@@ -61,7 +75,13 @@ export class ExternalLinkCache {
|
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
/**
|
|
64
|
-
* Load cache from disk
|
|
78
|
+
* Load cache from disk. Fail-soft: any IO error (ENOENT, EACCES, EROFS,
|
|
79
|
+
* corrupted JSON, …) degrades to an empty cache instead of throwing.
|
|
80
|
+
*
|
|
81
|
+
* Why no error propagation: `vat resources validate` should keep running
|
|
82
|
+
* when the cache file isn't reachable (read-only filesystem, permission
|
|
83
|
+
* mismatch, full disk) — a missing cache costs an extra network round-trip,
|
|
84
|
+
* an exception costs the whole run. Per #125 review.
|
|
65
85
|
*/
|
|
66
86
|
private async loadCache(): Promise<CacheData> {
|
|
67
87
|
if (this.cache !== null) {
|
|
@@ -75,28 +95,35 @@ export class ExternalLinkCache {
|
|
|
75
95
|
const data = await fs.readFile(this.cacheFile, 'utf-8');
|
|
76
96
|
this.cache = JSON.parse(data) as CacheData;
|
|
77
97
|
return this.cache;
|
|
78
|
-
} catch
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw error;
|
|
98
|
+
} catch {
|
|
99
|
+
// All IO and parse errors degrade to an empty cache. Subsequent
|
|
100
|
+
// reads see the same empty cache (this.cache is set), so we don't
|
|
101
|
+
// re-spam mkdir/read on every lookup within the same run.
|
|
102
|
+
this.cache = {};
|
|
103
|
+
return this.cache;
|
|
85
104
|
}
|
|
86
105
|
}
|
|
87
106
|
|
|
88
107
|
/**
|
|
89
|
-
* Save cache to disk
|
|
108
|
+
* Save cache to disk. Fail-soft: any IO error becomes a no-op instead of
|
|
109
|
+
* throwing. Same rationale as `loadCache` — a non-persisted entry costs an
|
|
110
|
+
* extra fetch on the next run, an exception costs the whole current run.
|
|
90
111
|
*/
|
|
91
112
|
private async saveCache(): Promise<void> {
|
|
92
113
|
if (this.cache === null) {
|
|
93
114
|
return;
|
|
94
115
|
}
|
|
95
116
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
117
|
+
try {
|
|
118
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheDir is constructor parameter, controlled by caller
|
|
119
|
+
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
120
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- cacheFile is derived from cacheDir
|
|
121
|
+
await fs.writeFile(this.cacheFile, JSON.stringify(this.cache, null, 2), 'utf-8');
|
|
122
|
+
} catch {
|
|
123
|
+
// No-op on IO failure. The in-memory cache (`this.cache`) is still
|
|
124
|
+
// authoritative for the current run; only the disk persistence is
|
|
125
|
+
// lost.
|
|
126
|
+
}
|
|
100
127
|
}
|
|
101
128
|
|
|
102
129
|
/**
|
|
@@ -156,6 +183,15 @@ export class ExternalLinkCache {
|
|
|
156
183
|
return null;
|
|
157
184
|
}
|
|
158
185
|
|
|
186
|
+
// Forward-compat: an entry written under a different (or missing)
|
|
187
|
+
// schema version is treated as a miss. Forces a refetch rather than
|
|
188
|
+
// silently misparsing a slice-3+ shape with slice-2 reader code.
|
|
189
|
+
if (entry.version !== CACHE_VERSION) {
|
|
190
|
+
delete cache[key];
|
|
191
|
+
await this.saveCache();
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
|
|
159
195
|
if (this.isExpired(entry)) {
|
|
160
196
|
delete cache[key];
|
|
161
197
|
await this.saveCache();
|
|
@@ -180,6 +216,7 @@ export class ExternalLinkCache {
|
|
|
180
216
|
statusCode,
|
|
181
217
|
statusMessage,
|
|
182
218
|
timestamp: Date.now(),
|
|
219
|
+
version: CACHE_VERSION,
|
|
183
220
|
};
|
|
184
221
|
|
|
185
222
|
await this.saveCache();
|