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.
Files changed (64) hide show
  1. package/README.md +46 -0
  2. package/dist/archives.cjs +98 -17
  3. package/dist/archives.cjs.map +1 -1
  4. package/dist/archives.d.ts +10 -2
  5. package/dist/archives.js +100 -17
  6. package/dist/archives.js.map +1 -1
  7. package/dist/conversions.cjs +23 -5
  8. package/dist/conversions.cjs.map +1 -1
  9. package/dist/conversions.d.ts +6 -1
  10. package/dist/conversions.js +24 -5
  11. package/dist/conversions.js.map +1 -1
  12. package/dist/default-worker.cjs +84 -21
  13. package/dist/default-worker.cjs.map +1 -1
  14. package/dist/default-worker.d.ts +1 -0
  15. package/dist/default-worker.js +88 -21
  16. package/dist/default-worker.js.map +1 -1
  17. package/dist/embedding.cjs +2 -1
  18. package/dist/embedding.cjs.map +1 -1
  19. package/dist/embedding.d.ts +4 -4
  20. package/dist/embedding.js +3 -1
  21. package/dist/embedding.js.map +1 -1
  22. package/dist/gc.cjs +52 -10
  23. package/dist/gc.cjs.map +1 -1
  24. package/dist/gc.d.ts +3 -0
  25. package/dist/gc.js +56 -10
  26. package/dist/gc.js.map +1 -1
  27. package/dist/host-pQiVAKEY.d.ts +10 -0
  28. package/dist/index.cjs +422 -57
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.ts +33 -12
  31. package/dist/index.js +427 -59
  32. package/dist/index.js.map +1 -1
  33. package/dist/{jobs-xIm_kshM.d.ts → jobs-CRK-DZ40.d.ts} +5 -0
  34. package/dist/local-config.cjs +2 -1
  35. package/dist/local-config.cjs.map +1 -1
  36. package/dist/local-config.js +3 -1
  37. package/dist/local-config.js.map +1 -1
  38. package/dist/maintenance.cjs +2 -1
  39. package/dist/maintenance.cjs.map +1 -1
  40. package/dist/maintenance.d.ts +4 -1
  41. package/dist/maintenance.js +3 -1
  42. package/dist/maintenance.js.map +1 -1
  43. package/dist/node-platform.cjs +18 -4
  44. package/dist/node-platform.cjs.map +1 -1
  45. package/dist/node-platform.d.ts +12 -3
  46. package/dist/node-platform.js +18 -4
  47. package/dist/node-platform.js.map +1 -1
  48. package/dist/runtime-config.cjs +4 -3
  49. package/dist/runtime-config.cjs.map +1 -1
  50. package/dist/runtime-config.d.ts +4 -1
  51. package/dist/runtime-config.js +5 -3
  52. package/dist/runtime-config.js.map +1 -1
  53. package/dist/stage-BnWI3Rqt.d.ts +33 -0
  54. package/dist/stage.cjs +22 -12
  55. package/dist/stage.cjs.map +1 -1
  56. package/dist/stage.d.ts +2 -14
  57. package/dist/stage.js +23 -12
  58. package/dist/stage.js.map +1 -1
  59. package/dist/worker.cjs +83 -43
  60. package/dist/worker.cjs.map +1 -1
  61. package/dist/worker.d.ts +7 -2
  62. package/dist/worker.js +87 -43
  63. package/dist/worker.js.map +1 -1
  64. package/package.json +2 -2
@@ -1,7 +1,10 @@
1
- import { ChapterEntry, IndexArtifactKind, ReadonlyDocument, WikiGraphProgressCallback, QueryIndexScope, ArchiveFindOptions, ArchiveFindResult, ArchiveCollectionOptions, ArchiveCollectionResult, ArchiveSourceLocatorResult, readSearchIndexCapabilityStatus, rebuildArchiveSearchIndex, ChapterDetails, ChapterStage, setChapterSource, setChapterTitle, ChapterTree, applyChapterTree, ChapterTreeApplyResult, ArchivePage, ArchiveRelatedResult, ArchiveEvidence, ArchivePack, BookMeta } from 'wiki-graph-core';
2
- import { W as WikiGraphJobRuntime } from './jobs-xIm_kshM.js';
1
+ import { ChapterEntry, IndexArtifactKind, ReadonlyDocument, WikiGraphProgressCallback, SearchIndexQueryMode, QueryIndexScope, ArchiveFindOptions, ArchiveFindResult, ArchiveCollectionOptions, ArchiveCollectionResult, ArchiveSourceLocatorResult, readSearchIndexCapabilityStatus, rebuildArchiveSearchIndex, ChapterDetails, ChapterStage, setChapterSource, setChapterTitle, ChapterTree, applyChapterTree, ChapterTreeApplyResult, ArchivePage, ArchiveRelatedResult, ArchiveEvidence, ArchivePack, BookMeta } from 'wiki-graph-core';
2
+ import { W as WikiGraphJobRuntime } from './jobs-CRK-DZ40.js';
3
3
  import { W as WikiGraphArchiveTarget } from './target-CZ7elwmj.js';
4
4
  export { a as WikiGraphArchiveOwnershipError } from './target-CZ7elwmj.js';
5
+ import './default-worker.js';
6
+ import './runtime-config.js';
7
+ import 'zod';
5
8
 
6
9
  interface WikiGraphArchiveIndexArtifactInspection {
7
10
  readonly current: boolean;
@@ -128,6 +131,7 @@ interface WikiGraphArchiveRelatedOptions extends WikiGraphOperationOptions {
128
131
  readonly limit?: number;
129
132
  readonly order?: "doc-asc" | "doc-desc";
130
133
  readonly query?: string;
134
+ readonly queryMode?: SearchIndexQueryMode;
131
135
  readonly role?: "any" | "object" | "self" | "subject";
132
136
  readonly skipUnindexed?: boolean;
133
137
  readonly sourceContext?: number;
@@ -137,6 +141,7 @@ interface WikiGraphArchiveEvidenceOptions extends WikiGraphOperationOptions {
137
141
  readonly limit?: number;
138
142
  readonly order?: "doc-asc" | "doc-desc";
139
143
  readonly query?: string;
144
+ readonly queryMode?: SearchIndexQueryMode;
140
145
  readonly skipUnindexed?: boolean;
141
146
  readonly sourceContext?: number;
142
147
  }
@@ -170,6 +175,8 @@ declare class WikiGraphArchiveHandle {
170
175
  readonly rebuilt: boolean;
171
176
  }>;
172
177
  cleanSearchIndex(options?: WikiGraphOperationOptions): Promise<WikiGraphArchiveIndexStatus>;
178
+ /** Clear cached search sessions without changing the archive index. */
179
+ clearSearchSessions(options?: WikiGraphOperationOptions): Promise<void>;
173
180
  listChapters(options?: WikiGraphOperationOptions): Promise<readonly ChapterEntry[]>;
174
181
  getChapter(path: string, options?: WikiGraphOperationOptions): Promise<ChapterEntry>;
175
182
  addChapter(options: {
@@ -200,6 +207,7 @@ declare class WikiGraphArchiveHandle {
200
207
  getMetadata(objectPath: string, options?: WikiGraphOperationOptions): Promise<Readonly<Record<string, unknown>>>;
201
208
  readBookMeta(options?: WikiGraphOperationOptions): Promise<BookMeta | undefined>;
202
209
  replaceBookMeta(meta: BookMeta, options?: WikiGraphArchiveWriteOptions): Promise<BookMeta>;
210
+ setArchiveTitle(title: string | null, options?: WikiGraphArchiveWriteOptions): Promise<string | null>;
203
211
  readCover(options?: WikiGraphOperationOptions): Promise<WikiGraphArchiveCover | undefined>;
204
212
  replaceMetadata(objectPath: string, value: Readonly<Record<string, unknown>>, options?: WikiGraphArchiveWriteOptions): Promise<Readonly<Record<string, unknown>>>;
205
213
  putMetadata(objectPath: string, key: string, value: unknown, options?: WikiGraphArchiveWriteOptions): Promise<Readonly<Record<string, unknown>>>;
package/dist/archives.js CHANGED
@@ -11,6 +11,7 @@ import { Readable as Readable2 } from "stream";
11
11
  import {
12
12
  addChapter,
13
13
  applyChapterTree,
14
+ assertArchiveIndexArtifactsReady,
14
15
  assertNoActiveBuildJobConflicts,
15
16
  assertNoActiveBuildJobs,
16
17
  deleteArchiveSearchSessions,
@@ -141,6 +142,7 @@ import * as yauzl from "yauzl";
141
142
  import * as yazl from "yazl";
142
143
  import { Environment, Loader } from "nunjucks";
143
144
  import {
145
+ getWikiGraphPlatform,
144
146
  getWikiGraphStorage,
145
147
  installWikiGraphPlatform,
146
148
  installWikiGraphStorage,
@@ -832,12 +834,16 @@ function getWikiGraphSDKRuntimeContext() {
832
834
  return runtimeContext.getStore() ?? {
833
835
  cwd: process.cwd(),
834
836
  env: process.env,
835
- envPolicy: "production"
837
+ envPolicy: "production",
838
+ providers: {}
836
839
  };
837
840
  }
838
841
  function getWikiGraphSDKStateDir() {
839
842
  return getWikiGraphSDKRuntimeContext().stateDir;
840
843
  }
844
+ function getWikiGraphSDKProviders() {
845
+ return getWikiGraphSDKRuntimeContext().providers ?? {};
846
+ }
841
847
 
842
848
  // src/local-config.ts
843
849
  import { join as join2 } from "path";
@@ -1055,8 +1061,8 @@ var inlineLLMConfigSchema = z.object({
1055
1061
  });
1056
1062
  async function loadWikiGraphRuntimeConfig(options) {
1057
1063
  const [embedding, localLLM, concurrent, wikimedia, wikispine] = await Promise.all([
1058
- readLocalConfigSection("embeddings"),
1059
- readLocalConfigSection("llm"),
1064
+ options?.skipEmbeddingConfig === true ? Promise.resolve({}) : readLocalConfigSection("embeddings"),
1065
+ options?.skipLLMConfig === true ? Promise.resolve({}) : readLocalConfigSection("llm"),
1060
1066
  readLocalConfigSection("concurrent"),
1061
1067
  readLocalConfigSection("wikimedia"),
1062
1068
  readLocalConfigSection("wikispine")
@@ -1252,6 +1258,14 @@ function formatError2(error) {
1252
1258
  return error instanceof Error ? error.message : String(error);
1253
1259
  }
1254
1260
 
1261
+ // src/providers.ts
1262
+ function resolveWikiGraphLLMJSON(options) {
1263
+ if (options.llm !== void 0 && options.llmJSON !== void 0) {
1264
+ throw new Error("Pass either llm or llmJSON, not both.");
1265
+ }
1266
+ return options.llm === void 0 ? options.llmJSON : JSON.stringify(options.llm);
1267
+ }
1268
+
1255
1269
  // src/runtime-path.ts
1256
1270
  import { homedir as homedir3 } from "os";
1257
1271
  import { isAbsolute as isAbsolute2, resolve as resolve2 } from "path";
@@ -1455,12 +1469,18 @@ var WikiGraphConversionManager = class {
1455
1469
  }
1456
1470
  const requiresDigest = options.input.format !== "wikg";
1457
1471
  const requiresLLM = requiresDigest && targetStage !== "planned" && targetStage !== "sourced";
1472
+ const llmJSON = resolveWikiGraphLLMJSON(options);
1473
+ const injectedLLM = llmJSON === void 0 ? getWikiGraphSDKProviders().llm : void 0;
1458
1474
  const config = await loadWikiGraphRuntimeConfig({
1459
- ...options.llmJSON === void 0 ? {} : { llmJSON: options.llmJSON }
1475
+ ...llmJSON === void 0 ? {} : { llmJSON },
1476
+ ...injectedLLM === void 0 ? {} : { skipLLMConfig: true },
1477
+ ...getWikiGraphSDKProviders().embedding === void 0 ? {} : { skipEmbeddingConfig: true }
1460
1478
  });
1461
1479
  const app = new WikiGraph({
1462
1480
  ...options.verbose === true ? { verbose: true } : {},
1463
- ...requiresLLM ? { llm: buildWikiGraphLLMOptions(config) } : {}
1481
+ ...requiresLLM ? {
1482
+ llm: injectedLLM === void 0 ? buildWikiGraphLLMOptions(config) : { streamProvider: injectedLLM }
1483
+ } : {}
1464
1484
  });
1465
1485
  const documentDirectory = await prepareDigestDirectory(
1466
1486
  options.digestDirectory,
@@ -1750,6 +1770,8 @@ function createOpenAICompatibleName2(baseURL) {
1750
1770
 
1751
1771
  // src/query-runtime.ts
1752
1772
  async function createConfiguredEmbeddingProvider() {
1773
+ const injected = getWikiGraphSDKProviders().embedding;
1774
+ if (injected !== void 0) return injected;
1753
1775
  const config = await readWikiGraphEmbeddingConfig();
1754
1776
  if (config.provider === void 0 || config.model === void 0 || config.provider === "openai-compatible" && config.baseURL === void 0 || config.provider === "openai" && config.baseURL !== void 0) {
1755
1777
  return void 0;
@@ -2001,13 +2023,15 @@ var WikiGraphArchiveHandle = class {
2001
2023
  );
2002
2024
  }
2003
2025
  async search(query, options = {}) {
2004
- const embeddingProvider = await this.#runtime.run(
2005
- createConfiguredEmbeddingProvider,
2026
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2027
+ options.queryMode,
2006
2028
  options.signal
2007
2029
  );
2008
2030
  return await this.#writeDocument(
2009
2031
  async (document) => {
2010
- const chapters = await this.#resolveQueryChapters(document, options);
2032
+ const chapters = await this.#resolveQueryChapters(document, options, {
2033
+ embeddingProvider
2034
+ });
2011
2035
  await ensureArchiveSearchIndex(document, {
2012
2036
  ...chapters === void 0 ? {} : { chapters },
2013
2037
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
@@ -2115,6 +2139,13 @@ var WikiGraphArchiveHandle = class {
2115
2139
  );
2116
2140
  return status;
2117
2141
  }
2142
+ /** Clear cached search sessions without changing the archive index. */
2143
+ async clearSearchSessions(options = {}) {
2144
+ await this.#runtime.run(
2145
+ async () => await deleteArchiveSearchSessions(this.path),
2146
+ options.signal
2147
+ );
2148
+ }
2118
2149
  async listChapters(options = {}) {
2119
2150
  return await this.#readDocument(
2120
2151
  async (document) => await listChapters2(document),
@@ -2305,6 +2336,9 @@ var WikiGraphArchiveHandle = class {
2305
2336
  }
2306
2337
  async related(objectUri = this.objectUri, options = {}) {
2307
2338
  if (options.query === void 0) {
2339
+ if (options.queryMode !== void 0) {
2340
+ throw new Error("`queryMode` requires `query`.");
2341
+ }
2308
2342
  return await this.#readDocument(async (document) => {
2309
2343
  const chapters = await this.#resolveScope(document, {});
2310
2344
  return await listRelatedArchiveObjects(document, objectUri, {
@@ -2313,19 +2347,22 @@ var WikiGraphArchiveHandle = class {
2313
2347
  });
2314
2348
  }, options);
2315
2349
  }
2316
- const embeddingProvider = await this.#runtime.run(
2317
- createConfiguredEmbeddingProvider,
2350
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2351
+ options.queryMode,
2318
2352
  options.signal
2319
2353
  );
2320
2354
  return await this.#writeDocument(
2321
2355
  async (document) => {
2322
- const chapters = await this.#resolveQueryChapters(document, options);
2356
+ const chapters = await this.#resolveQueryChapters(document, options, {
2357
+ embeddingProvider
2358
+ });
2323
2359
  await ensureArchiveSearchIndex(document, {
2324
2360
  ...chapters === void 0 ? {} : { chapters },
2325
2361
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
2326
2362
  });
2327
2363
  return await listRelatedArchiveObjects(document, objectUri, {
2328
2364
  ...withoutOperation(options),
2365
+ ...embeddingProvider === void 0 ? {} : { embeddingProvider },
2329
2366
  ...chapters === void 0 ? {} : { chapters }
2330
2367
  });
2331
2368
  },
@@ -2337,6 +2374,9 @@ var WikiGraphArchiveHandle = class {
2337
2374
  }
2338
2375
  async evidence(objectUri = this.objectUri, options = {}) {
2339
2376
  if (options.query === void 0) {
2377
+ if (options.queryMode !== void 0) {
2378
+ throw new Error("`queryMode` requires `query`.");
2379
+ }
2340
2380
  return await this.#readDocument(async (document) => {
2341
2381
  const chapters = await this.#resolveScope(document, {});
2342
2382
  return await listArchiveEvidence(document, objectUri, {
@@ -2345,19 +2385,22 @@ var WikiGraphArchiveHandle = class {
2345
2385
  });
2346
2386
  }, options);
2347
2387
  }
2348
- const embeddingProvider = await this.#runtime.run(
2349
- createConfiguredEmbeddingProvider,
2388
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2389
+ options.queryMode,
2350
2390
  options.signal
2351
2391
  );
2352
2392
  return await this.#writeDocument(
2353
2393
  async (document) => {
2354
- const chapters = await this.#resolveQueryChapters(document, options);
2394
+ const chapters = await this.#resolveQueryChapters(document, options, {
2395
+ embeddingProvider
2396
+ });
2355
2397
  await ensureArchiveSearchIndex(document, {
2356
2398
  ...chapters === void 0 ? {} : { chapters },
2357
2399
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
2358
2400
  });
2359
2401
  return await listArchiveEvidence(document, objectUri, {
2360
2402
  ...withoutOperation(options),
2403
+ ...embeddingProvider === void 0 ? {} : { embeddingProvider },
2361
2404
  ...chapters === void 0 ? {} : { chapters }
2362
2405
  });
2363
2406
  },
@@ -2391,6 +2434,24 @@ var WikiGraphArchiveHandle = class {
2391
2434
  return meta;
2392
2435
  }, options);
2393
2436
  }
2437
+ async setArchiveTitle(title, options = {}) {
2438
+ const normalized = title?.trim() ?? null;
2439
+ if (title !== null && normalized === "") {
2440
+ throw new Error("Archive title cannot be empty.");
2441
+ }
2442
+ return await this.#writeDocument(async (document) => {
2443
+ if (normalized === null) {
2444
+ await document.metadata.deleteKey("", "title");
2445
+ } else {
2446
+ await document.metadata.put(
2447
+ { kind: ObjectMetadataKind.Archive, objectPath: "" },
2448
+ "title",
2449
+ normalized
2450
+ );
2451
+ }
2452
+ return normalized;
2453
+ }, options);
2454
+ }
2394
2455
  async readCover(options = {}) {
2395
2456
  const app = new WikiGraph2({});
2396
2457
  return await this.#runtime.run(
@@ -2461,11 +2522,20 @@ var WikiGraphArchiveHandle = class {
2461
2522
  if (options.chapters !== void 0) return options.chapters;
2462
2523
  return (await resolveArchiveScope(document, this.objectUri, options.depth))?.chapterIds;
2463
2524
  }
2464
- async #resolveQueryChapters(document, options) {
2525
+ async #resolveQueryChapters(document, options, capabilities) {
2465
2526
  const chapters = await this.#resolveScope(document, options);
2466
- if (options.skipUnindexed !== true) return chapters;
2527
+ const coverageOptions = {
2528
+ ...chapters === void 0 ? {} : { chapters },
2529
+ ...capabilities.embeddingProvider === void 0 ? {} : { embeddingProvider: capabilities.embeddingProvider },
2530
+ requireEmbeddingProvider: true,
2531
+ ...options.queryMode === void 0 ? {} : { queryMode: options.queryMode }
2532
+ };
2533
+ if (options.skipUnindexed !== true) {
2534
+ await assertArchiveIndexArtifactsReady(document, coverageOptions);
2535
+ return chapters;
2536
+ }
2467
2537
  const queryable = await listArchiveQueryableChapterIds(document, {
2468
- ...chapters === void 0 ? {} : { chapters }
2538
+ ...coverageOptions
2469
2539
  });
2470
2540
  if (queryable.length === 0) {
2471
2541
  throw new Error(
@@ -2474,6 +2544,19 @@ var WikiGraphArchiveHandle = class {
2474
2544
  }
2475
2545
  return queryable;
2476
2546
  }
2547
+ async #resolveQueryEmbeddingProvider(queryMode, signal) {
2548
+ if (queryMode === "fts") return void 0;
2549
+ const provider = await this.#runtime.run(
2550
+ createConfiguredEmbeddingProvider,
2551
+ signal
2552
+ );
2553
+ if (queryMode === "embedding" && provider === void 0) {
2554
+ throw new Error(
2555
+ "Embedding query mode requires embeddings configuration at `wikg://local/config/embeddings`."
2556
+ );
2557
+ }
2558
+ return provider;
2559
+ }
2477
2560
  };
2478
2561
  async function ensureArchiveSearchIndex(document, options = {}) {
2479
2562
  const scope = options.chapters === void 0 ? {} : { chapters: options.chapters };