wiki-graph-sdk 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -0
- package/dist/archives.cjs +98 -17
- package/dist/archives.cjs.map +1 -1
- package/dist/archives.d.ts +10 -2
- package/dist/archives.js +100 -17
- package/dist/archives.js.map +1 -1
- package/dist/conversions.cjs +23 -5
- package/dist/conversions.cjs.map +1 -1
- package/dist/conversions.d.ts +6 -1
- package/dist/conversions.js +24 -5
- package/dist/conversions.js.map +1 -1
- package/dist/default-worker.cjs +84 -21
- package/dist/default-worker.cjs.map +1 -1
- package/dist/default-worker.d.ts +1 -0
- package/dist/default-worker.js +88 -21
- package/dist/default-worker.js.map +1 -1
- package/dist/embedding.cjs +2 -1
- package/dist/embedding.cjs.map +1 -1
- package/dist/embedding.d.ts +4 -4
- package/dist/embedding.js +3 -1
- package/dist/embedding.js.map +1 -1
- package/dist/gc.cjs +52 -10
- package/dist/gc.cjs.map +1 -1
- package/dist/gc.d.ts +3 -0
- package/dist/gc.js +56 -10
- package/dist/gc.js.map +1 -1
- package/dist/host-pQiVAKEY.d.ts +10 -0
- package/dist/index.cjs +422 -57
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +33 -12
- package/dist/index.js +427 -59
- package/dist/index.js.map +1 -1
- package/dist/{jobs-xIm_kshM.d.ts → jobs-CRK-DZ40.d.ts} +5 -0
- package/dist/local-config.cjs +2 -1
- package/dist/local-config.cjs.map +1 -1
- package/dist/local-config.js +3 -1
- package/dist/local-config.js.map +1 -1
- package/dist/maintenance.cjs +2 -1
- package/dist/maintenance.cjs.map +1 -1
- package/dist/maintenance.d.ts +4 -1
- package/dist/maintenance.js +3 -1
- package/dist/maintenance.js.map +1 -1
- package/dist/node-platform.cjs +18 -4
- package/dist/node-platform.cjs.map +1 -1
- package/dist/node-platform.d.ts +12 -3
- package/dist/node-platform.js +18 -4
- package/dist/node-platform.js.map +1 -1
- package/dist/runtime-config.cjs +4 -3
- package/dist/runtime-config.cjs.map +1 -1
- package/dist/runtime-config.d.ts +4 -1
- package/dist/runtime-config.js +5 -3
- package/dist/runtime-config.js.map +1 -1
- package/dist/stage-BnWI3Rqt.d.ts +33 -0
- package/dist/stage.cjs +22 -12
- package/dist/stage.cjs.map +1 -1
- package/dist/stage.d.ts +2 -14
- package/dist/stage.js +23 -12
- package/dist/stage.js.map +1 -1
- package/dist/worker.cjs +83 -43
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.ts +7 -2
- package/dist/worker.js +87 -43
- package/dist/worker.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -23,6 +23,52 @@ for (const job of jobs) {
|
|
|
23
23
|
wikiGraph.close();
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
+
Electron and other Node hosts may provide their own lifecycle identity and
|
|
27
|
+
storage layout without importing `wiki-graph-core`:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import {
|
|
31
|
+
createNodeWikiGraphPlatform,
|
|
32
|
+
createNodeWikiGraphStorage,
|
|
33
|
+
createWikiGraphSDK,
|
|
34
|
+
} from "wiki-graph-sdk";
|
|
35
|
+
|
|
36
|
+
const wikiGraph = createWikiGraphSDK({
|
|
37
|
+
host: {
|
|
38
|
+
platform: createNodeWikiGraphPlatform({ lifecycle }),
|
|
39
|
+
storage: createNodeWikiGraphStorage({
|
|
40
|
+
libraryRoot: "/path/to/home",
|
|
41
|
+
documentStoreRoot: "/path/to/documents",
|
|
42
|
+
}),
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Storage is scoped to the SDK instance. Platform services, including lifecycle,
|
|
48
|
+
are process-wide; SDK instances in one process must use one compatible
|
|
49
|
+
platform. `host.storage` and `stateDir` cannot be supplied together.
|
|
50
|
+
|
|
51
|
+
Applications may replace the configured LLM and embedding implementations for
|
|
52
|
+
one SDK instance:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
const wikiGraph = createWikiGraphSDK({
|
|
56
|
+
providers: {
|
|
57
|
+
llm: myStreamingLLMProvider,
|
|
58
|
+
embedding: myEmbeddingProvider,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
await wikiGraph.jobs.runWorker();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
An operation-level `llm` option (the typed SDK equivalent of CLI `--llm`)
|
|
66
|
+
takes precedence over the injected LLM provider. An injected provider takes
|
|
67
|
+
precedence over local database configuration. Injected objects are
|
|
68
|
+
process-local and are not persisted with durable jobs, so a worker in another
|
|
69
|
+
process must create its SDK with the same providers. The standalone default
|
|
70
|
+
worker continues to use local configuration.
|
|
71
|
+
|
|
26
72
|
Job event subscriptions observe durable work without coupling observation to
|
|
27
73
|
cancellation. Call `job.cancel()` explicitly to cancel a job; unsubscribing
|
|
28
74
|
only stops the current listener.
|
package/dist/archives.cjs
CHANGED
|
@@ -826,12 +826,16 @@ function getWikiGraphSDKRuntimeContext() {
|
|
|
826
826
|
return runtimeContext.getStore() ?? {
|
|
827
827
|
cwd: process.cwd(),
|
|
828
828
|
env: process.env,
|
|
829
|
-
envPolicy: "production"
|
|
829
|
+
envPolicy: "production",
|
|
830
|
+
providers: {}
|
|
830
831
|
};
|
|
831
832
|
}
|
|
832
833
|
function getWikiGraphSDKStateDir() {
|
|
833
834
|
return getWikiGraphSDKRuntimeContext().stateDir;
|
|
834
835
|
}
|
|
836
|
+
function getWikiGraphSDKProviders() {
|
|
837
|
+
return getWikiGraphSDKRuntimeContext().providers ?? {};
|
|
838
|
+
}
|
|
835
839
|
|
|
836
840
|
// src/local-config.ts
|
|
837
841
|
var import_path = require("path");
|
|
@@ -1049,8 +1053,8 @@ var inlineLLMConfigSchema = import_zod.z.object({
|
|
|
1049
1053
|
});
|
|
1050
1054
|
async function loadWikiGraphRuntimeConfig(options) {
|
|
1051
1055
|
const [embedding, localLLM, concurrent, wikimedia, wikispine] = await Promise.all([
|
|
1052
|
-
readLocalConfigSection("embeddings"),
|
|
1053
|
-
readLocalConfigSection("llm"),
|
|
1056
|
+
options?.skipEmbeddingConfig === true ? Promise.resolve({}) : readLocalConfigSection("embeddings"),
|
|
1057
|
+
options?.skipLLMConfig === true ? Promise.resolve({}) : readLocalConfigSection("llm"),
|
|
1054
1058
|
readLocalConfigSection("concurrent"),
|
|
1055
1059
|
readLocalConfigSection("wikimedia"),
|
|
1056
1060
|
readLocalConfigSection("wikispine")
|
|
@@ -1246,6 +1250,14 @@ function formatError2(error) {
|
|
|
1246
1250
|
return error instanceof Error ? error.message : String(error);
|
|
1247
1251
|
}
|
|
1248
1252
|
|
|
1253
|
+
// src/providers.ts
|
|
1254
|
+
function resolveWikiGraphLLMJSON(options) {
|
|
1255
|
+
if (options.llm !== void 0 && options.llmJSON !== void 0) {
|
|
1256
|
+
throw new Error("Pass either llm or llmJSON, not both.");
|
|
1257
|
+
}
|
|
1258
|
+
return options.llm === void 0 ? options.llmJSON : JSON.stringify(options.llm);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1249
1261
|
// src/runtime-path.ts
|
|
1250
1262
|
var import_os2 = require("os");
|
|
1251
1263
|
var import_path2 = require("path");
|
|
@@ -1440,12 +1452,18 @@ var WikiGraphConversionManager = class {
|
|
|
1440
1452
|
}
|
|
1441
1453
|
const requiresDigest = options.input.format !== "wikg";
|
|
1442
1454
|
const requiresLLM = requiresDigest && targetStage !== "planned" && targetStage !== "sourced";
|
|
1455
|
+
const llmJSON = resolveWikiGraphLLMJSON(options);
|
|
1456
|
+
const injectedLLM = llmJSON === void 0 ? getWikiGraphSDKProviders().llm : void 0;
|
|
1443
1457
|
const config = await loadWikiGraphRuntimeConfig({
|
|
1444
|
-
...
|
|
1458
|
+
...llmJSON === void 0 ? {} : { llmJSON },
|
|
1459
|
+
...injectedLLM === void 0 ? {} : { skipLLMConfig: true },
|
|
1460
|
+
...getWikiGraphSDKProviders().embedding === void 0 ? {} : { skipEmbeddingConfig: true }
|
|
1445
1461
|
});
|
|
1446
1462
|
const app = new import_wiki_graph_core3.WikiGraph({
|
|
1447
1463
|
...options.verbose === true ? { verbose: true } : {},
|
|
1448
|
-
...requiresLLM ? {
|
|
1464
|
+
...requiresLLM ? {
|
|
1465
|
+
llm: injectedLLM === void 0 ? buildWikiGraphLLMOptions(config) : { streamProvider: injectedLLM }
|
|
1466
|
+
} : {}
|
|
1449
1467
|
});
|
|
1450
1468
|
const documentDirectory = await prepareDigestDirectory(
|
|
1451
1469
|
options.digestDirectory,
|
|
@@ -1733,6 +1751,8 @@ function createOpenAICompatibleName2(baseURL) {
|
|
|
1733
1751
|
|
|
1734
1752
|
// src/query-runtime.ts
|
|
1735
1753
|
async function createConfiguredEmbeddingProvider() {
|
|
1754
|
+
const injected = getWikiGraphSDKProviders().embedding;
|
|
1755
|
+
if (injected !== void 0) return injected;
|
|
1736
1756
|
const config = await readWikiGraphEmbeddingConfig();
|
|
1737
1757
|
if (config.provider === void 0 || config.model === void 0 || config.provider === "openai-compatible" && config.baseURL === void 0 || config.provider === "openai" && config.baseURL !== void 0) {
|
|
1738
1758
|
return void 0;
|
|
@@ -1978,13 +1998,15 @@ var WikiGraphArchiveHandle = class {
|
|
|
1978
1998
|
);
|
|
1979
1999
|
}
|
|
1980
2000
|
async search(query, options = {}) {
|
|
1981
|
-
const embeddingProvider = await this.#
|
|
1982
|
-
|
|
2001
|
+
const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
|
|
2002
|
+
options.queryMode,
|
|
1983
2003
|
options.signal
|
|
1984
2004
|
);
|
|
1985
2005
|
return await this.#writeDocument(
|
|
1986
2006
|
async (document) => {
|
|
1987
|
-
const chapters = await this.#resolveQueryChapters(document, options
|
|
2007
|
+
const chapters = await this.#resolveQueryChapters(document, options, {
|
|
2008
|
+
embeddingProvider
|
|
2009
|
+
});
|
|
1988
2010
|
await ensureArchiveSearchIndex(document, {
|
|
1989
2011
|
...chapters === void 0 ? {} : { chapters },
|
|
1990
2012
|
...embeddingProvider === void 0 ? {} : { embeddingProvider }
|
|
@@ -2092,6 +2114,13 @@ var WikiGraphArchiveHandle = class {
|
|
|
2092
2114
|
);
|
|
2093
2115
|
return status;
|
|
2094
2116
|
}
|
|
2117
|
+
/** Clear cached search sessions without changing the archive index. */
|
|
2118
|
+
async clearSearchSessions(options = {}) {
|
|
2119
|
+
await this.#runtime.run(
|
|
2120
|
+
async () => await (0, import_wiki_graph_core7.deleteArchiveSearchSessions)(this.path),
|
|
2121
|
+
options.signal
|
|
2122
|
+
);
|
|
2123
|
+
}
|
|
2095
2124
|
async listChapters(options = {}) {
|
|
2096
2125
|
return await this.#readDocument(
|
|
2097
2126
|
async (document) => await (0, import_wiki_graph_core7.listChapters)(document),
|
|
@@ -2282,6 +2311,9 @@ var WikiGraphArchiveHandle = class {
|
|
|
2282
2311
|
}
|
|
2283
2312
|
async related(objectUri = this.objectUri, options = {}) {
|
|
2284
2313
|
if (options.query === void 0) {
|
|
2314
|
+
if (options.queryMode !== void 0) {
|
|
2315
|
+
throw new Error("`queryMode` requires `query`.");
|
|
2316
|
+
}
|
|
2285
2317
|
return await this.#readDocument(async (document) => {
|
|
2286
2318
|
const chapters = await this.#resolveScope(document, {});
|
|
2287
2319
|
return await (0, import_wiki_graph_core7.listRelatedArchiveObjects)(document, objectUri, {
|
|
@@ -2290,19 +2322,22 @@ var WikiGraphArchiveHandle = class {
|
|
|
2290
2322
|
});
|
|
2291
2323
|
}, options);
|
|
2292
2324
|
}
|
|
2293
|
-
const embeddingProvider = await this.#
|
|
2294
|
-
|
|
2325
|
+
const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
|
|
2326
|
+
options.queryMode,
|
|
2295
2327
|
options.signal
|
|
2296
2328
|
);
|
|
2297
2329
|
return await this.#writeDocument(
|
|
2298
2330
|
async (document) => {
|
|
2299
|
-
const chapters = await this.#resolveQueryChapters(document, options
|
|
2331
|
+
const chapters = await this.#resolveQueryChapters(document, options, {
|
|
2332
|
+
embeddingProvider
|
|
2333
|
+
});
|
|
2300
2334
|
await ensureArchiveSearchIndex(document, {
|
|
2301
2335
|
...chapters === void 0 ? {} : { chapters },
|
|
2302
2336
|
...embeddingProvider === void 0 ? {} : { embeddingProvider }
|
|
2303
2337
|
});
|
|
2304
2338
|
return await (0, import_wiki_graph_core7.listRelatedArchiveObjects)(document, objectUri, {
|
|
2305
2339
|
...withoutOperation(options),
|
|
2340
|
+
...embeddingProvider === void 0 ? {} : { embeddingProvider },
|
|
2306
2341
|
...chapters === void 0 ? {} : { chapters }
|
|
2307
2342
|
});
|
|
2308
2343
|
},
|
|
@@ -2314,6 +2349,9 @@ var WikiGraphArchiveHandle = class {
|
|
|
2314
2349
|
}
|
|
2315
2350
|
async evidence(objectUri = this.objectUri, options = {}) {
|
|
2316
2351
|
if (options.query === void 0) {
|
|
2352
|
+
if (options.queryMode !== void 0) {
|
|
2353
|
+
throw new Error("`queryMode` requires `query`.");
|
|
2354
|
+
}
|
|
2317
2355
|
return await this.#readDocument(async (document) => {
|
|
2318
2356
|
const chapters = await this.#resolveScope(document, {});
|
|
2319
2357
|
return await (0, import_wiki_graph_core7.listArchiveEvidence)(document, objectUri, {
|
|
@@ -2322,19 +2360,22 @@ var WikiGraphArchiveHandle = class {
|
|
|
2322
2360
|
});
|
|
2323
2361
|
}, options);
|
|
2324
2362
|
}
|
|
2325
|
-
const embeddingProvider = await this.#
|
|
2326
|
-
|
|
2363
|
+
const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
|
|
2364
|
+
options.queryMode,
|
|
2327
2365
|
options.signal
|
|
2328
2366
|
);
|
|
2329
2367
|
return await this.#writeDocument(
|
|
2330
2368
|
async (document) => {
|
|
2331
|
-
const chapters = await this.#resolveQueryChapters(document, options
|
|
2369
|
+
const chapters = await this.#resolveQueryChapters(document, options, {
|
|
2370
|
+
embeddingProvider
|
|
2371
|
+
});
|
|
2332
2372
|
await ensureArchiveSearchIndex(document, {
|
|
2333
2373
|
...chapters === void 0 ? {} : { chapters },
|
|
2334
2374
|
...embeddingProvider === void 0 ? {} : { embeddingProvider }
|
|
2335
2375
|
});
|
|
2336
2376
|
return await (0, import_wiki_graph_core7.listArchiveEvidence)(document, objectUri, {
|
|
2337
2377
|
...withoutOperation(options),
|
|
2378
|
+
...embeddingProvider === void 0 ? {} : { embeddingProvider },
|
|
2338
2379
|
...chapters === void 0 ? {} : { chapters }
|
|
2339
2380
|
});
|
|
2340
2381
|
},
|
|
@@ -2368,6 +2409,24 @@ var WikiGraphArchiveHandle = class {
|
|
|
2368
2409
|
return meta;
|
|
2369
2410
|
}, options);
|
|
2370
2411
|
}
|
|
2412
|
+
async setArchiveTitle(title, options = {}) {
|
|
2413
|
+
const normalized = title?.trim() ?? null;
|
|
2414
|
+
if (title !== null && normalized === "") {
|
|
2415
|
+
throw new Error("Archive title cannot be empty.");
|
|
2416
|
+
}
|
|
2417
|
+
return await this.#writeDocument(async (document) => {
|
|
2418
|
+
if (normalized === null) {
|
|
2419
|
+
await document.metadata.deleteKey("", "title");
|
|
2420
|
+
} else {
|
|
2421
|
+
await document.metadata.put(
|
|
2422
|
+
{ kind: import_wiki_graph_core7.ObjectMetadataKind.Archive, objectPath: "" },
|
|
2423
|
+
"title",
|
|
2424
|
+
normalized
|
|
2425
|
+
);
|
|
2426
|
+
}
|
|
2427
|
+
return normalized;
|
|
2428
|
+
}, options);
|
|
2429
|
+
}
|
|
2371
2430
|
async readCover(options = {}) {
|
|
2372
2431
|
const app = new import_wiki_graph_core7.WikiGraph({});
|
|
2373
2432
|
return await this.#runtime.run(
|
|
@@ -2438,11 +2497,20 @@ var WikiGraphArchiveHandle = class {
|
|
|
2438
2497
|
if (options.chapters !== void 0) return options.chapters;
|
|
2439
2498
|
return (await resolveArchiveScope(document, this.objectUri, options.depth))?.chapterIds;
|
|
2440
2499
|
}
|
|
2441
|
-
async #resolveQueryChapters(document, options) {
|
|
2500
|
+
async #resolveQueryChapters(document, options, capabilities) {
|
|
2442
2501
|
const chapters = await this.#resolveScope(document, options);
|
|
2443
|
-
|
|
2502
|
+
const coverageOptions = {
|
|
2503
|
+
...chapters === void 0 ? {} : { chapters },
|
|
2504
|
+
...capabilities.embeddingProvider === void 0 ? {} : { embeddingProvider: capabilities.embeddingProvider },
|
|
2505
|
+
requireEmbeddingProvider: true,
|
|
2506
|
+
...options.queryMode === void 0 ? {} : { queryMode: options.queryMode }
|
|
2507
|
+
};
|
|
2508
|
+
if (options.skipUnindexed !== true) {
|
|
2509
|
+
await (0, import_wiki_graph_core7.assertArchiveIndexArtifactsReady)(document, coverageOptions);
|
|
2510
|
+
return chapters;
|
|
2511
|
+
}
|
|
2444
2512
|
const queryable = await (0, import_wiki_graph_core7.listArchiveQueryableChapterIds)(document, {
|
|
2445
|
-
...
|
|
2513
|
+
...coverageOptions
|
|
2446
2514
|
});
|
|
2447
2515
|
if (queryable.length === 0) {
|
|
2448
2516
|
throw new Error(
|
|
@@ -2451,6 +2519,19 @@ var WikiGraphArchiveHandle = class {
|
|
|
2451
2519
|
}
|
|
2452
2520
|
return queryable;
|
|
2453
2521
|
}
|
|
2522
|
+
async #resolveQueryEmbeddingProvider(queryMode, signal) {
|
|
2523
|
+
if (queryMode === "fts") return void 0;
|
|
2524
|
+
const provider = await this.#runtime.run(
|
|
2525
|
+
createConfiguredEmbeddingProvider,
|
|
2526
|
+
signal
|
|
2527
|
+
);
|
|
2528
|
+
if (queryMode === "embedding" && provider === void 0) {
|
|
2529
|
+
throw new Error(
|
|
2530
|
+
"Embedding query mode requires embeddings configuration at `wikg://local/config/embeddings`."
|
|
2531
|
+
);
|
|
2532
|
+
}
|
|
2533
|
+
return provider;
|
|
2534
|
+
}
|
|
2454
2535
|
};
|
|
2455
2536
|
async function ensureArchiveSearchIndex(document, options = {}) {
|
|
2456
2537
|
const scope = options.chapters === void 0 ? {} : { chapters: options.chapters };
|