@thinkingos/vsl-sdk 0.2.0 → 0.3.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/dist/index.d.mts +25 -26
- package/dist/index.d.ts +25 -26
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +54 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -845,32 +845,6 @@ interface EnrichWithVisionDeps {
|
|
|
845
845
|
extractor: FragmentExtractor;
|
|
846
846
|
}
|
|
847
847
|
|
|
848
|
-
/**
|
|
849
|
-
* VSL Snapshot Session (T1.2.4, ROADMAP.md M1.2; ARCHITECTURE.md §2.4/§5.2/§6.3).
|
|
850
|
-
*
|
|
851
|
-
* Stateful-фасад над пайплайном capture→segment→build→cache→diff:
|
|
852
|
-
* - первый вызов или смена URL → полный VslDocument; кэш очищается и
|
|
853
|
-
* заполняется объектами документа; счётчик версий сбрасывается в 1;
|
|
854
|
-
* - тот же URL → VslDiff последнего документа против нового (формат §6.2):
|
|
855
|
-
* diff_version = version + 1, base_version = version;
|
|
856
|
-
* - viewport изменился при том же URL → дополнительно
|
|
857
|
-
* store.invalidateCoordinates() — «сброс координат» §5.2, НЕ полный сброс.
|
|
858
|
-
*
|
|
859
|
-
* Состояние {lastUrl, lastViewport, lastDocument, version} — в памяти
|
|
860
|
-
* экземпляра; VslDocument (канон §4) версиями НЕ расширяется.
|
|
861
|
-
*
|
|
862
|
-
* Политика кэша — store отражает текущий документ: full → clear + заполнение;
|
|
863
|
-
* diff → удалённые invalidate, добавленные (поддеревья) и изменённые set из
|
|
864
|
-
* нового документа; неизменённые остаются кэшированными (после resize — с
|
|
865
|
-
* обнулённым coordHash: наблюдаемый эффект invalidateCoordinates).
|
|
866
|
-
*
|
|
867
|
-
* input.url/viewport/timestamp/background передаются в BuildOptions ЯВНО —
|
|
868
|
-
* дефолты builder (window.innerWidth/innerHeight/location.href/document.title)
|
|
869
|
-
* вычислялись бы от глобалов: недетерминированны в тестах и недоступны в Node;
|
|
870
|
-
* title — из input, иначе root.ownerDocument.title (портативный фолбэк — фикс
|
|
871
|
-
* packaging-smoke demo:cache-diff).
|
|
872
|
-
*/
|
|
873
|
-
|
|
874
848
|
/** Результат snapshot(): полный документ (1-й вызов / URL change) или дифф. */
|
|
875
849
|
type SnapshotResult = VslDocument | VslDiff;
|
|
876
850
|
/** Type guard: различение диффа и полного документа (контракт T1.2.4). */
|
|
@@ -909,11 +883,26 @@ declare class VslSnapshotSession {
|
|
|
909
883
|
private lastDocument;
|
|
910
884
|
private version;
|
|
911
885
|
constructor(store?: CacheStore);
|
|
886
|
+
/**
|
|
887
|
+
* Сбрасывает состояние сессии (URL, viewport, документ, версия).
|
|
888
|
+
* Следующий вызов snapshot() вернёт полный документ (как первый вызов).
|
|
889
|
+
*/
|
|
890
|
+
clear(): void;
|
|
891
|
+
/** Возвращает последний полный документ (не diff). */
|
|
892
|
+
getLastDocument(): VslDocument | null;
|
|
893
|
+
/** Текущая версия документа (инкрементируется при каждом diff). */
|
|
894
|
+
getVersion(): number;
|
|
912
895
|
/**
|
|
913
896
|
* Строит VSL из DOM поддерева root (extractDomTree → segmentTree →
|
|
914
897
|
* buildVslDocument) и возвращает полный документ либо дифф (см. шапку).
|
|
915
898
|
*/
|
|
916
899
|
snapshot(root: Element, input: SnapshotInput): SnapshotResult;
|
|
900
|
+
/**
|
|
901
|
+
* Вариант snapshot() для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
902
|
+
* Принимает ExtractedElement[] напрямую (без DOM Element), проходит тот же
|
|
903
|
+
* pipeline: segmentTree → buildVslDocument → cache/diff.
|
|
904
|
+
*/
|
|
905
|
+
snapshotFromElements(extractedElements: readonly ExtractedElement[], input: SnapshotInput): SnapshotResult;
|
|
917
906
|
/**
|
|
918
907
|
* Vision-вариант конвейера (T1.5.5): segmentTree → enrichWithVision (Level 5
|
|
919
908
|
* fallback — аннотация t + vf/vf_meta на элементах ДО сборки) → buildVslDocument
|
|
@@ -922,8 +911,18 @@ declare class VslSnapshotSession {
|
|
|
922
911
|
* (base64) возвращаются ОТДЕЛЬНО — в документе только метаданные (DEC-015).
|
|
923
912
|
*/
|
|
924
913
|
snapshotWithVision(root: Element, input: SnapshotInput, vision: EnrichWithVisionDeps): Promise<VisionSnapshotResult>;
|
|
914
|
+
/**
|
|
915
|
+
* Vision-вариант для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
916
|
+
* Полный pipeline: segmentTree → enrichWithVision → buildVslDocument → cache/diff.
|
|
917
|
+
*/
|
|
918
|
+
snapshotWithVisionFromElements(extractedElements: readonly ExtractedElement[], input: SnapshotInput, vision: EnrichWithVisionDeps): Promise<VisionSnapshotResult>;
|
|
925
919
|
/** BuildOptions из input + портативный title (логика бывшего snapshot()). */
|
|
926
920
|
private buildOptions;
|
|
921
|
+
/**
|
|
922
|
+
* BuildOptions из input без DOM Element (для snapshotFromElements).
|
|
923
|
+
* Title берётся только из input (нет фолбэка на root.ownerDocument.title).
|
|
924
|
+
*/
|
|
925
|
+
private buildOptionsFromInput;
|
|
927
926
|
/** Сборка документа + кэш/дифф (логика бывшего snapshot(), см. шапку модуля). */
|
|
928
927
|
private commit;
|
|
929
928
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -845,32 +845,6 @@ interface EnrichWithVisionDeps {
|
|
|
845
845
|
extractor: FragmentExtractor;
|
|
846
846
|
}
|
|
847
847
|
|
|
848
|
-
/**
|
|
849
|
-
* VSL Snapshot Session (T1.2.4, ROADMAP.md M1.2; ARCHITECTURE.md §2.4/§5.2/§6.3).
|
|
850
|
-
*
|
|
851
|
-
* Stateful-фасад над пайплайном capture→segment→build→cache→diff:
|
|
852
|
-
* - первый вызов или смена URL → полный VslDocument; кэш очищается и
|
|
853
|
-
* заполняется объектами документа; счётчик версий сбрасывается в 1;
|
|
854
|
-
* - тот же URL → VslDiff последнего документа против нового (формат §6.2):
|
|
855
|
-
* diff_version = version + 1, base_version = version;
|
|
856
|
-
* - viewport изменился при том же URL → дополнительно
|
|
857
|
-
* store.invalidateCoordinates() — «сброс координат» §5.2, НЕ полный сброс.
|
|
858
|
-
*
|
|
859
|
-
* Состояние {lastUrl, lastViewport, lastDocument, version} — в памяти
|
|
860
|
-
* экземпляра; VslDocument (канон §4) версиями НЕ расширяется.
|
|
861
|
-
*
|
|
862
|
-
* Политика кэша — store отражает текущий документ: full → clear + заполнение;
|
|
863
|
-
* diff → удалённые invalidate, добавленные (поддеревья) и изменённые set из
|
|
864
|
-
* нового документа; неизменённые остаются кэшированными (после resize — с
|
|
865
|
-
* обнулённым coordHash: наблюдаемый эффект invalidateCoordinates).
|
|
866
|
-
*
|
|
867
|
-
* input.url/viewport/timestamp/background передаются в BuildOptions ЯВНО —
|
|
868
|
-
* дефолты builder (window.innerWidth/innerHeight/location.href/document.title)
|
|
869
|
-
* вычислялись бы от глобалов: недетерминированны в тестах и недоступны в Node;
|
|
870
|
-
* title — из input, иначе root.ownerDocument.title (портативный фолбэк — фикс
|
|
871
|
-
* packaging-smoke demo:cache-diff).
|
|
872
|
-
*/
|
|
873
|
-
|
|
874
848
|
/** Результат snapshot(): полный документ (1-й вызов / URL change) или дифф. */
|
|
875
849
|
type SnapshotResult = VslDocument | VslDiff;
|
|
876
850
|
/** Type guard: различение диффа и полного документа (контракт T1.2.4). */
|
|
@@ -909,11 +883,26 @@ declare class VslSnapshotSession {
|
|
|
909
883
|
private lastDocument;
|
|
910
884
|
private version;
|
|
911
885
|
constructor(store?: CacheStore);
|
|
886
|
+
/**
|
|
887
|
+
* Сбрасывает состояние сессии (URL, viewport, документ, версия).
|
|
888
|
+
* Следующий вызов snapshot() вернёт полный документ (как первый вызов).
|
|
889
|
+
*/
|
|
890
|
+
clear(): void;
|
|
891
|
+
/** Возвращает последний полный документ (не diff). */
|
|
892
|
+
getLastDocument(): VslDocument | null;
|
|
893
|
+
/** Текущая версия документа (инкрементируется при каждом diff). */
|
|
894
|
+
getVersion(): number;
|
|
912
895
|
/**
|
|
913
896
|
* Строит VSL из DOM поддерева root (extractDomTree → segmentTree →
|
|
914
897
|
* buildVslDocument) и возвращает полный документ либо дифф (см. шапку).
|
|
915
898
|
*/
|
|
916
899
|
snapshot(root: Element, input: SnapshotInput): SnapshotResult;
|
|
900
|
+
/**
|
|
901
|
+
* Вариант snapshot() для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
902
|
+
* Принимает ExtractedElement[] напрямую (без DOM Element), проходит тот же
|
|
903
|
+
* pipeline: segmentTree → buildVslDocument → cache/diff.
|
|
904
|
+
*/
|
|
905
|
+
snapshotFromElements(extractedElements: readonly ExtractedElement[], input: SnapshotInput): SnapshotResult;
|
|
917
906
|
/**
|
|
918
907
|
* Vision-вариант конвейера (T1.5.5): segmentTree → enrichWithVision (Level 5
|
|
919
908
|
* fallback — аннотация t + vf/vf_meta на элементах ДО сборки) → buildVslDocument
|
|
@@ -922,8 +911,18 @@ declare class VslSnapshotSession {
|
|
|
922
911
|
* (base64) возвращаются ОТДЕЛЬНО — в документе только метаданные (DEC-015).
|
|
923
912
|
*/
|
|
924
913
|
snapshotWithVision(root: Element, input: SnapshotInput, vision: EnrichWithVisionDeps): Promise<VisionSnapshotResult>;
|
|
914
|
+
/**
|
|
915
|
+
* Vision-вариант для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
916
|
+
* Полный pipeline: segmentTree → enrichWithVision → buildVslDocument → cache/diff.
|
|
917
|
+
*/
|
|
918
|
+
snapshotWithVisionFromElements(extractedElements: readonly ExtractedElement[], input: SnapshotInput, vision: EnrichWithVisionDeps): Promise<VisionSnapshotResult>;
|
|
925
919
|
/** BuildOptions из input + портативный title (логика бывшего snapshot()). */
|
|
926
920
|
private buildOptions;
|
|
921
|
+
/**
|
|
922
|
+
* BuildOptions из input без DOM Element (для snapshotFromElements).
|
|
923
|
+
* Title берётся только из input (нет фолбэка на root.ownerDocument.title).
|
|
924
|
+
*/
|
|
925
|
+
private buildOptionsFromInput;
|
|
927
926
|
/** Сборка документа + кэш/дифф (логика бывшего snapshot(), см. шапку модуля). */
|
|
928
927
|
private commit;
|
|
929
928
|
}
|
package/dist/index.js
CHANGED
|
@@ -652,6 +652,8 @@ function objectsEqual(a, b) {
|
|
|
652
652
|
return computeContentHash(a) === computeContentHash(b) && computeCoordHash(a) === computeCoordHash(b);
|
|
653
653
|
}
|
|
654
654
|
function tuple2Equal(a, b) {
|
|
655
|
+
if (a === null || a === void 0) return b === null || b === void 0;
|
|
656
|
+
if (b === null || b === void 0) return false;
|
|
655
657
|
return a[0] === b[0] && a[1] === b[1];
|
|
656
658
|
}
|
|
657
659
|
function stringArrayEqual(a, b) {
|
|
@@ -788,6 +790,25 @@ var VslSnapshotSession = class {
|
|
|
788
790
|
constructor(store = createCacheStore()) {
|
|
789
791
|
this.store = store;
|
|
790
792
|
}
|
|
793
|
+
/**
|
|
794
|
+
* Сбрасывает состояние сессии (URL, viewport, документ, версия).
|
|
795
|
+
* Следующий вызов snapshot() вернёт полный документ (как первый вызов).
|
|
796
|
+
*/
|
|
797
|
+
clear() {
|
|
798
|
+
this.store.clear();
|
|
799
|
+
this.lastUrl = null;
|
|
800
|
+
this.lastViewport = null;
|
|
801
|
+
this.lastDocument = null;
|
|
802
|
+
this.version = 0;
|
|
803
|
+
}
|
|
804
|
+
/** Возвращает последний полный документ (не diff). */
|
|
805
|
+
getLastDocument() {
|
|
806
|
+
return this.lastDocument;
|
|
807
|
+
}
|
|
808
|
+
/** Текущая версия документа (инкрементируется при каждом diff). */
|
|
809
|
+
getVersion() {
|
|
810
|
+
return this.version;
|
|
811
|
+
}
|
|
791
812
|
/**
|
|
792
813
|
* Строит VSL из DOM поддерева root (extractDomTree → segmentTree →
|
|
793
814
|
* buildVslDocument) и возвращает полный документ либо дифф (см. шапку).
|
|
@@ -796,6 +817,15 @@ var VslSnapshotSession = class {
|
|
|
796
817
|
const elements = segmentTree(extractDomTree(root));
|
|
797
818
|
return this.commit(elements, this.buildOptions(root, input), input);
|
|
798
819
|
}
|
|
820
|
+
/**
|
|
821
|
+
* Вариант snapshot() для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
822
|
+
* Принимает ExtractedElement[] напрямую (без DOM Element), проходит тот же
|
|
823
|
+
* pipeline: segmentTree → buildVslDocument → cache/diff.
|
|
824
|
+
*/
|
|
825
|
+
snapshotFromElements(extractedElements, input) {
|
|
826
|
+
const elements = segmentTree(extractedElements);
|
|
827
|
+
return this.commit(elements, this.buildOptionsFromInput(input), input);
|
|
828
|
+
}
|
|
799
829
|
/**
|
|
800
830
|
* Vision-вариант конвейера (T1.5.5): segmentTree → enrichWithVision (Level 5
|
|
801
831
|
* fallback — аннотация t + vf/vf_meta на элементах ДО сборки) → buildVslDocument
|
|
@@ -809,6 +839,16 @@ var VslSnapshotSession = class {
|
|
|
809
839
|
const snapshot = this.commit(elements, this.buildOptions(root, input), input);
|
|
810
840
|
return { snapshot, fragments: visionResult.fragments };
|
|
811
841
|
}
|
|
842
|
+
/**
|
|
843
|
+
* Vision-вариант для pre-extracted elements (MCP сервер, Node.js контекст).
|
|
844
|
+
* Полный pipeline: segmentTree → enrichWithVision → buildVslDocument → cache/diff.
|
|
845
|
+
*/
|
|
846
|
+
async snapshotWithVisionFromElements(extractedElements, input, vision) {
|
|
847
|
+
const elements = segmentTree(extractedElements);
|
|
848
|
+
const visionResult = await enrichWithVision(elements, vision);
|
|
849
|
+
const snapshot = this.commit(elements, this.buildOptionsFromInput(input), input);
|
|
850
|
+
return { snapshot, fragments: visionResult.fragments };
|
|
851
|
+
}
|
|
812
852
|
/** BuildOptions из input + портативный title (логика бывшего snapshot()). */
|
|
813
853
|
buildOptions(root, input) {
|
|
814
854
|
const options = {
|
|
@@ -820,6 +860,20 @@ var VslSnapshotSession = class {
|
|
|
820
860
|
if (input.background !== void 0) options.background = input.background;
|
|
821
861
|
return options;
|
|
822
862
|
}
|
|
863
|
+
/**
|
|
864
|
+
* BuildOptions из input без DOM Element (для snapshotFromElements).
|
|
865
|
+
* Title берётся только из input (нет фолбэка на root.ownerDocument.title).
|
|
866
|
+
*/
|
|
867
|
+
buildOptionsFromInput(input) {
|
|
868
|
+
const options = {
|
|
869
|
+
viewport: { width: input.viewport.width, height: input.viewport.height },
|
|
870
|
+
url: input.url
|
|
871
|
+
};
|
|
872
|
+
if (input.title !== void 0) options.title = input.title;
|
|
873
|
+
if (input.timestamp !== void 0) options.timestamp = input.timestamp;
|
|
874
|
+
if (input.background !== void 0) options.background = input.background;
|
|
875
|
+
return options;
|
|
876
|
+
}
|
|
823
877
|
/** Сборка документа + кэш/дифф (логика бывшего snapshot(), см. шапку модуля). */
|
|
824
878
|
commit(elements, options, input) {
|
|
825
879
|
const nextDocument = buildVslDocument(elements, options);
|