wiki-graph-sdk 0.8.0 → 0.8.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.
Files changed (52) hide show
  1. package/README.md +21 -0
  2. package/dist/archives.cjs +91 -17
  3. package/dist/archives.cjs.map +1 -1
  4. package/dist/archives.d.ts +8 -2
  5. package/dist/archives.js +92 -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 +23 -5
  11. package/dist/conversions.js.map +1 -1
  12. package/dist/default-worker.cjs +34 -11
  13. package/dist/default-worker.cjs.map +1 -1
  14. package/dist/default-worker.d.ts +1 -0
  15. package/dist/default-worker.js +34 -11
  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 +2 -1
  21. package/dist/embedding.js.map +1 -1
  22. package/dist/index.cjs +336 -46
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.ts +26 -9
  25. package/dist/index.js +337 -47
  26. package/dist/index.js.map +1 -1
  27. package/dist/{jobs-xIm_kshM.d.ts → jobs-CRK-DZ40.d.ts} +5 -0
  28. package/dist/local-config.cjs +2 -1
  29. package/dist/local-config.cjs.map +1 -1
  30. package/dist/local-config.js +2 -1
  31. package/dist/local-config.js.map +1 -1
  32. package/dist/maintenance.cjs +2 -1
  33. package/dist/maintenance.cjs.map +1 -1
  34. package/dist/maintenance.d.ts +4 -1
  35. package/dist/maintenance.js +2 -1
  36. package/dist/maintenance.js.map +1 -1
  37. package/dist/runtime-config.cjs +4 -3
  38. package/dist/runtime-config.cjs.map +1 -1
  39. package/dist/runtime-config.d.ts +4 -1
  40. package/dist/runtime-config.js +4 -3
  41. package/dist/runtime-config.js.map +1 -1
  42. package/dist/stage-BnWI3Rqt.d.ts +33 -0
  43. package/dist/stage.cjs +22 -12
  44. package/dist/stage.cjs.map +1 -1
  45. package/dist/stage.d.ts +2 -14
  46. package/dist/stage.js +22 -12
  47. package/dist/stage.js.map +1 -1
  48. package/dist/worker.cjs +2 -1
  49. package/dist/worker.cjs.map +1 -1
  50. package/dist/worker.js +2 -1
  51. package/dist/worker.js.map +1 -1
  52. 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
  }
@@ -200,6 +205,7 @@ declare class WikiGraphArchiveHandle {
200
205
  getMetadata(objectPath: string, options?: WikiGraphOperationOptions): Promise<Readonly<Record<string, unknown>>>;
201
206
  readBookMeta(options?: WikiGraphOperationOptions): Promise<BookMeta | undefined>;
202
207
  replaceBookMeta(meta: BookMeta, options?: WikiGraphArchiveWriteOptions): Promise<BookMeta>;
208
+ setArchiveTitle(title: string | null, options?: WikiGraphArchiveWriteOptions): Promise<string | null>;
203
209
  readCover(options?: WikiGraphOperationOptions): Promise<WikiGraphArchiveCover | undefined>;
204
210
  replaceMetadata(objectPath: string, value: Readonly<Record<string, unknown>>, options?: WikiGraphArchiveWriteOptions): Promise<Readonly<Record<string, unknown>>>;
205
211
  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,
@@ -832,12 +833,16 @@ function getWikiGraphSDKRuntimeContext() {
832
833
  return runtimeContext.getStore() ?? {
833
834
  cwd: process.cwd(),
834
835
  env: process.env,
835
- envPolicy: "production"
836
+ envPolicy: "production",
837
+ providers: {}
836
838
  };
837
839
  }
838
840
  function getWikiGraphSDKStateDir() {
839
841
  return getWikiGraphSDKRuntimeContext().stateDir;
840
842
  }
843
+ function getWikiGraphSDKProviders() {
844
+ return getWikiGraphSDKRuntimeContext().providers ?? {};
845
+ }
841
846
 
842
847
  // src/local-config.ts
843
848
  import { join as join2 } from "path";
@@ -1055,8 +1060,8 @@ var inlineLLMConfigSchema = z.object({
1055
1060
  });
1056
1061
  async function loadWikiGraphRuntimeConfig(options) {
1057
1062
  const [embedding, localLLM, concurrent, wikimedia, wikispine] = await Promise.all([
1058
- readLocalConfigSection("embeddings"),
1059
- readLocalConfigSection("llm"),
1063
+ options?.skipEmbeddingConfig === true ? Promise.resolve({}) : readLocalConfigSection("embeddings"),
1064
+ options?.skipLLMConfig === true ? Promise.resolve({}) : readLocalConfigSection("llm"),
1060
1065
  readLocalConfigSection("concurrent"),
1061
1066
  readLocalConfigSection("wikimedia"),
1062
1067
  readLocalConfigSection("wikispine")
@@ -1252,6 +1257,14 @@ function formatError2(error) {
1252
1257
  return error instanceof Error ? error.message : String(error);
1253
1258
  }
1254
1259
 
1260
+ // src/providers.ts
1261
+ function resolveWikiGraphLLMJSON(options) {
1262
+ if (options.llm !== void 0 && options.llmJSON !== void 0) {
1263
+ throw new Error("Pass either llm or llmJSON, not both.");
1264
+ }
1265
+ return options.llm === void 0 ? options.llmJSON : JSON.stringify(options.llm);
1266
+ }
1267
+
1255
1268
  // src/runtime-path.ts
1256
1269
  import { homedir as homedir3 } from "os";
1257
1270
  import { isAbsolute as isAbsolute2, resolve as resolve2 } from "path";
@@ -1455,12 +1468,18 @@ var WikiGraphConversionManager = class {
1455
1468
  }
1456
1469
  const requiresDigest = options.input.format !== "wikg";
1457
1470
  const requiresLLM = requiresDigest && targetStage !== "planned" && targetStage !== "sourced";
1471
+ const llmJSON = resolveWikiGraphLLMJSON(options);
1472
+ const injectedLLM = llmJSON === void 0 ? getWikiGraphSDKProviders().llm : void 0;
1458
1473
  const config = await loadWikiGraphRuntimeConfig({
1459
- ...options.llmJSON === void 0 ? {} : { llmJSON: options.llmJSON }
1474
+ ...llmJSON === void 0 ? {} : { llmJSON },
1475
+ ...injectedLLM === void 0 ? {} : { skipLLMConfig: true },
1476
+ ...getWikiGraphSDKProviders().embedding === void 0 ? {} : { skipEmbeddingConfig: true }
1460
1477
  });
1461
1478
  const app = new WikiGraph({
1462
1479
  ...options.verbose === true ? { verbose: true } : {},
1463
- ...requiresLLM ? { llm: buildWikiGraphLLMOptions(config) } : {}
1480
+ ...requiresLLM ? {
1481
+ llm: injectedLLM === void 0 ? buildWikiGraphLLMOptions(config) : { streamProvider: injectedLLM }
1482
+ } : {}
1464
1483
  });
1465
1484
  const documentDirectory = await prepareDigestDirectory(
1466
1485
  options.digestDirectory,
@@ -1750,6 +1769,8 @@ function createOpenAICompatibleName2(baseURL) {
1750
1769
 
1751
1770
  // src/query-runtime.ts
1752
1771
  async function createConfiguredEmbeddingProvider() {
1772
+ const injected = getWikiGraphSDKProviders().embedding;
1773
+ if (injected !== void 0) return injected;
1753
1774
  const config = await readWikiGraphEmbeddingConfig();
1754
1775
  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
1776
  return void 0;
@@ -2001,13 +2022,15 @@ var WikiGraphArchiveHandle = class {
2001
2022
  );
2002
2023
  }
2003
2024
  async search(query, options = {}) {
2004
- const embeddingProvider = await this.#runtime.run(
2005
- createConfiguredEmbeddingProvider,
2025
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2026
+ options.queryMode,
2006
2027
  options.signal
2007
2028
  );
2008
2029
  return await this.#writeDocument(
2009
2030
  async (document) => {
2010
- const chapters = await this.#resolveQueryChapters(document, options);
2031
+ const chapters = await this.#resolveQueryChapters(document, options, {
2032
+ embeddingProvider
2033
+ });
2011
2034
  await ensureArchiveSearchIndex(document, {
2012
2035
  ...chapters === void 0 ? {} : { chapters },
2013
2036
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
@@ -2305,6 +2328,9 @@ var WikiGraphArchiveHandle = class {
2305
2328
  }
2306
2329
  async related(objectUri = this.objectUri, options = {}) {
2307
2330
  if (options.query === void 0) {
2331
+ if (options.queryMode !== void 0) {
2332
+ throw new Error("`queryMode` requires `query`.");
2333
+ }
2308
2334
  return await this.#readDocument(async (document) => {
2309
2335
  const chapters = await this.#resolveScope(document, {});
2310
2336
  return await listRelatedArchiveObjects(document, objectUri, {
@@ -2313,19 +2339,22 @@ var WikiGraphArchiveHandle = class {
2313
2339
  });
2314
2340
  }, options);
2315
2341
  }
2316
- const embeddingProvider = await this.#runtime.run(
2317
- createConfiguredEmbeddingProvider,
2342
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2343
+ options.queryMode,
2318
2344
  options.signal
2319
2345
  );
2320
2346
  return await this.#writeDocument(
2321
2347
  async (document) => {
2322
- const chapters = await this.#resolveQueryChapters(document, options);
2348
+ const chapters = await this.#resolveQueryChapters(document, options, {
2349
+ embeddingProvider
2350
+ });
2323
2351
  await ensureArchiveSearchIndex(document, {
2324
2352
  ...chapters === void 0 ? {} : { chapters },
2325
2353
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
2326
2354
  });
2327
2355
  return await listRelatedArchiveObjects(document, objectUri, {
2328
2356
  ...withoutOperation(options),
2357
+ ...embeddingProvider === void 0 ? {} : { embeddingProvider },
2329
2358
  ...chapters === void 0 ? {} : { chapters }
2330
2359
  });
2331
2360
  },
@@ -2337,6 +2366,9 @@ var WikiGraphArchiveHandle = class {
2337
2366
  }
2338
2367
  async evidence(objectUri = this.objectUri, options = {}) {
2339
2368
  if (options.query === void 0) {
2369
+ if (options.queryMode !== void 0) {
2370
+ throw new Error("`queryMode` requires `query`.");
2371
+ }
2340
2372
  return await this.#readDocument(async (document) => {
2341
2373
  const chapters = await this.#resolveScope(document, {});
2342
2374
  return await listArchiveEvidence(document, objectUri, {
@@ -2345,19 +2377,22 @@ var WikiGraphArchiveHandle = class {
2345
2377
  });
2346
2378
  }, options);
2347
2379
  }
2348
- const embeddingProvider = await this.#runtime.run(
2349
- createConfiguredEmbeddingProvider,
2380
+ const embeddingProvider = await this.#resolveQueryEmbeddingProvider(
2381
+ options.queryMode,
2350
2382
  options.signal
2351
2383
  );
2352
2384
  return await this.#writeDocument(
2353
2385
  async (document) => {
2354
- const chapters = await this.#resolveQueryChapters(document, options);
2386
+ const chapters = await this.#resolveQueryChapters(document, options, {
2387
+ embeddingProvider
2388
+ });
2355
2389
  await ensureArchiveSearchIndex(document, {
2356
2390
  ...chapters === void 0 ? {} : { chapters },
2357
2391
  ...embeddingProvider === void 0 ? {} : { embeddingProvider }
2358
2392
  });
2359
2393
  return await listArchiveEvidence(document, objectUri, {
2360
2394
  ...withoutOperation(options),
2395
+ ...embeddingProvider === void 0 ? {} : { embeddingProvider },
2361
2396
  ...chapters === void 0 ? {} : { chapters }
2362
2397
  });
2363
2398
  },
@@ -2391,6 +2426,24 @@ var WikiGraphArchiveHandle = class {
2391
2426
  return meta;
2392
2427
  }, options);
2393
2428
  }
2429
+ async setArchiveTitle(title, options = {}) {
2430
+ const normalized = title?.trim() ?? null;
2431
+ if (title !== null && normalized === "") {
2432
+ throw new Error("Archive title cannot be empty.");
2433
+ }
2434
+ return await this.#writeDocument(async (document) => {
2435
+ if (normalized === null) {
2436
+ await document.metadata.deleteKey("", "title");
2437
+ } else {
2438
+ await document.metadata.put(
2439
+ { kind: ObjectMetadataKind.Archive, objectPath: "" },
2440
+ "title",
2441
+ normalized
2442
+ );
2443
+ }
2444
+ return normalized;
2445
+ }, options);
2446
+ }
2394
2447
  async readCover(options = {}) {
2395
2448
  const app = new WikiGraph2({});
2396
2449
  return await this.#runtime.run(
@@ -2461,11 +2514,20 @@ var WikiGraphArchiveHandle = class {
2461
2514
  if (options.chapters !== void 0) return options.chapters;
2462
2515
  return (await resolveArchiveScope(document, this.objectUri, options.depth))?.chapterIds;
2463
2516
  }
2464
- async #resolveQueryChapters(document, options) {
2517
+ async #resolveQueryChapters(document, options, capabilities) {
2465
2518
  const chapters = await this.#resolveScope(document, options);
2466
- if (options.skipUnindexed !== true) return chapters;
2519
+ const coverageOptions = {
2520
+ ...chapters === void 0 ? {} : { chapters },
2521
+ ...capabilities.embeddingProvider === void 0 ? {} : { embeddingProvider: capabilities.embeddingProvider },
2522
+ requireEmbeddingProvider: true,
2523
+ ...options.queryMode === void 0 ? {} : { queryMode: options.queryMode }
2524
+ };
2525
+ if (options.skipUnindexed !== true) {
2526
+ await assertArchiveIndexArtifactsReady(document, coverageOptions);
2527
+ return chapters;
2528
+ }
2467
2529
  const queryable = await listArchiveQueryableChapterIds(document, {
2468
- ...chapters === void 0 ? {} : { chapters }
2530
+ ...coverageOptions
2469
2531
  });
2470
2532
  if (queryable.length === 0) {
2471
2533
  throw new Error(
@@ -2474,6 +2536,19 @@ var WikiGraphArchiveHandle = class {
2474
2536
  }
2475
2537
  return queryable;
2476
2538
  }
2539
+ async #resolveQueryEmbeddingProvider(queryMode, signal) {
2540
+ if (queryMode === "fts") return void 0;
2541
+ const provider = await this.#runtime.run(
2542
+ createConfiguredEmbeddingProvider,
2543
+ signal
2544
+ );
2545
+ if (queryMode === "embedding" && provider === void 0) {
2546
+ throw new Error(
2547
+ "Embedding query mode requires embeddings configuration at `wikg://local/config/embeddings`."
2548
+ );
2549
+ }
2550
+ return provider;
2551
+ }
2477
2552
  };
2478
2553
  async function ensureArchiveSearchIndex(document, options = {}) {
2479
2554
  const scope = options.chapters === void 0 ? {} : { chapters: options.chapters };