wiki-graph 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.
package/dist/index.cjs CHANGED
@@ -45,6 +45,7 @@ async function withWikiGraphCLIRuntimeContext(context, operation) {
45
45
  cwd: context.cwd,
46
46
  env: context.env,
47
47
  envPolicy: context.envPolicy,
48
+ providers: {},
48
49
  ...context.stateDir === void 0 ? {} : { stateDir: context.stateDir }
49
50
  },
50
51
  operation
@@ -1953,7 +1954,7 @@ function toWikiGraphUri(id) {
1953
1954
  case "fragment":
1954
1955
  return `wikg://chapter/${first ?? ""}/source/${second ?? "0"}`;
1955
1956
  case "meta":
1956
- return "wikg://";
1957
+ return "wikg://meta";
1957
1958
  case "node":
1958
1959
  return `wikg://chunk/${first ?? ""}`;
1959
1960
  case "summary":
@@ -2247,6 +2248,14 @@ function createObjectResultPage(objects, nextCursor, limit, warnings = []) {
2247
2248
  async function createFindObject(hit, context) {
2248
2249
  const uri = toWikiGraphUri(hit.id);
2249
2250
  const librarySource = createLibrarySourceObject(hit);
2251
+ if (hit.type === "archive-title") {
2252
+ return {
2253
+ ...librarySource,
2254
+ title: hit.title,
2255
+ type: "archive-title",
2256
+ uri
2257
+ };
2258
+ }
2250
2259
  if (hit.type === "chapter") {
2251
2260
  return {
2252
2261
  ...librarySource,
@@ -2394,6 +2403,13 @@ async function createPageObject(page, context) {
2394
2403
  uri: toWikiGraphUri(page.id)
2395
2404
  };
2396
2405
  }
2406
+ case "archive-title":
2407
+ return {
2408
+ ...librarySource,
2409
+ title: page.title,
2410
+ type: "archive-title",
2411
+ uri: toWikiGraphUri(page.id)
2412
+ };
2397
2413
  case "chapter-title":
2398
2414
  return {
2399
2415
  ...librarySource,
@@ -2583,6 +2599,7 @@ async function formatPackAnchor(anchor, context) {
2583
2599
  switch (anchor.type) {
2584
2600
  case "artifact":
2585
2601
  return formatPlainObject(await createPageObject(anchor, context));
2602
+ case "archive-title":
2586
2603
  case "chapter-title":
2587
2604
  case "chapter":
2588
2605
  return formatPlainObject(await createPageObject(anchor, context));
@@ -3117,6 +3134,7 @@ async function writePage(page, context, format) {
3117
3134
  `
3118
3135
  );
3119
3136
  return;
3137
+ case "archive-title":
3120
3138
  case "chapter-title":
3121
3139
  await writeTextToStdout(
3122
3140
  `${formatPlainObject(await createPageObject(page, context))}
@@ -3346,7 +3364,8 @@ function resolveArchiveCommandRuntimeArguments(args) {
3346
3364
  }
3347
3365
  function getArchivePath(uri) {
3348
3366
  if (!uri.includes("://")) return uri;
3349
- if ((0, import_wiki_graph_sdk22.parseWikiGraphLibraryUri)(uri)?.kind === "scope") {
3367
+ const libraryTarget = (0, import_wiki_graph_sdk22.parseWikiGraphLibraryUri)(uri);
3368
+ if (libraryTarget?.kind === "scope" || libraryTarget?.kind === "archive-collection") {
3350
3369
  return uri;
3351
3370
  }
3352
3371
  const archivePath = parseLocatedWikiGraphUri(uri).archivePath;
@@ -3356,7 +3375,8 @@ function getArchivePath(uri) {
3356
3375
  return archivePath;
3357
3376
  }
3358
3377
  function getArchiveIndexScope(uri) {
3359
- if ((0, import_wiki_graph_sdk22.parseWikiGraphLibraryUri)(uri)?.kind === "scope") {
3378
+ const libraryTarget = (0, import_wiki_graph_sdk22.parseWikiGraphLibraryUri)(uri);
3379
+ if (libraryTarget?.kind === "scope" || libraryTarget?.kind === "archive-collection") {
3360
3380
  return { kind: "library-index", libraryId: -1 };
3361
3381
  }
3362
3382
  const archivePath = getArchivePath(uri);
@@ -3403,6 +3423,7 @@ function createFindOptions(args) {
3403
3423
  ...createOptionalEvidenceLimit(args),
3404
3424
  ...args.limit === void 0 ? {} : { limit: args.limit },
3405
3425
  ...args.reverse === true ? { order: "doc-desc" } : {},
3426
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
3406
3427
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
3407
3428
  ...createOptionalSourceContext(args),
3408
3429
  ...args.triplePattern === void 0 ? {} : { triplePattern: args.triplePattern },
@@ -3424,6 +3445,7 @@ function createArchiveOutputContext(args, options = {}) {
3424
3445
  ...args.reverse === true ? { order: "doc-desc" } : {},
3425
3446
  ...args.action !== "evidence" && args.action !== "related" && args.action !== "search" ? {} : args.query === void 0 ? {} : { query: args.query },
3426
3447
  ...args.role === void 0 ? {} : { role: args.role },
3448
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
3427
3449
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
3428
3450
  ...options.continuationKind === "collection" ? createScopeOptions(args) : {},
3429
3451
  ...args.triplePattern === void 0 ? {} : { triplePattern: args.triplePattern },
@@ -3616,6 +3638,7 @@ function createCursorOutputContext(cursor, format, limit) {
3616
3638
  targetUri: cursor.targetUri
3617
3639
  } : {},
3618
3640
  ...cursor.kind === "related" && cursor.role !== void 0 ? { role: cursor.role } : {},
3641
+ ...(cursor.kind === "search" || cursor.kind === "evidence" || cursor.kind === "related") && cursor.queryMode !== void 0 ? { queryMode: cursor.queryMode } : {},
3619
3642
  ...cursor.kind === "source-locators" ? { targetUri: cursor.targetUri } : {},
3620
3643
  ..."evidenceLimit" in cursor && cursor.evidenceLimit !== void 0 ? { evidenceLimit: cursor.evidenceLimit } : {},
3621
3644
  ..."sourceContext" in cursor && cursor.sourceContext !== void 0 ? { sourceContext: cursor.sourceContext } : {}
@@ -3671,7 +3694,7 @@ __export(archive_command_exports, {
3671
3694
  });
3672
3695
  async function runArchiveCommand(args) {
3673
3696
  const libraryTarget = (0, import_wiki_graph_sdk25.parseWikiGraphLibraryUri)(args.archivePath);
3674
- if (libraryTarget?.kind === "scope" && libraryTarget.objectUri !== "wikg://index" && (libraryTarget.objectUri !== void 0 || args.action === "related" || args.action === "evidence" || args.action === "pack" || args.action === "search" || args.action === "list")) {
3697
+ if (libraryTarget?.kind === "scope" && libraryTarget.objectUri !== "wikg://index" && (libraryTarget.objectUri !== void 0 || args.action === "related" || args.action === "evidence" || args.action === "pack" || args.action === "search" || args.action === "list") || libraryTarget?.kind === "archive-collection" && args.action === "search") {
3675
3698
  await runLibraryIndexArchiveCommand(args, libraryTarget);
3676
3699
  return;
3677
3700
  }
@@ -3870,6 +3893,7 @@ async function runArchiveRelated(args) {
3870
3893
  ...args.limit === void 0 ? {} : { limit: args.limit },
3871
3894
  ...args.reverse === true ? { order: "doc-desc" } : {},
3872
3895
  ...args.query === void 0 ? {} : { query: args.query },
3896
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
3873
3897
  ...args.role === void 0 ? {} : { role: args.role },
3874
3898
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
3875
3899
  ...createOptionalSourceContext(args)
@@ -3903,6 +3927,7 @@ async function runArchiveEvidence(args) {
3903
3927
  ...args.limit === void 0 ? {} : { limit: args.limit },
3904
3928
  ...args.reverse === true ? { order: "doc-desc" } : {},
3905
3929
  ...args.query === void 0 ? {} : { query: args.query },
3930
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
3906
3931
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
3907
3932
  ...createOptionalSourceContext(args)
3908
3933
  });
@@ -3950,8 +3975,9 @@ async function runLibraryIndexArchiveCommand(args, target) {
3950
3975
  const library = await libraries.get(
3951
3976
  (0, import_wiki_graph_sdk25.formatWikiGraphLibraryUri)(target.publicId)
3952
3977
  );
3953
- const isLibraryRootCollection = target.objectUri === void 0 && args.objectId === void 0;
3954
- const objectUri = isLibraryRootCollection ? void 0 : getObjectUri(args.objectId ?? args.archivePath);
3978
+ const isArchiveMemberCollection = target.kind === "archive-collection";
3979
+ const isLibraryRootCollection = !isArchiveMemberCollection && target.objectUri === void 0 && args.objectId === void 0;
3980
+ const objectUri = isLibraryRootCollection ? void 0 : isArchiveMemberCollection ? void 0 : getObjectUri(args.objectId ?? args.archivePath);
3955
3981
  const context = {
3956
3982
  ...createArchiveOutputContext(args),
3957
3983
  archiveKey: args.archivePath,
@@ -3960,25 +3986,25 @@ async function runLibraryIndexArchiveCommand(args, target) {
3960
3986
  kind: "library-index",
3961
3987
  libraryId: library.snapshot.id
3962
3988
  },
3963
- libraryQuery: "objects"
3989
+ libraryQuery: isArchiveMemberCollection ? "archive-members" : "objects"
3964
3990
  };
3965
3991
  switch (args.action) {
3966
3992
  case "search": {
3967
3993
  const findOptions = createSearchFindOptions(args);
3968
3994
  if (objectUri === void 0) {
3995
+ const search = async (cursor) => await (isArchiveMemberCollection ? libraries.searchArchiveMembers(target, args.query, {
3996
+ ...findOptions,
3997
+ ...cursor === void 0 ? {} : { cursor }
3998
+ }) : libraries.search(target, args.query, {
3999
+ ...findOptions,
4000
+ ...cursor === void 0 ? {} : { cursor }
4001
+ }));
3969
4002
  if (args.all === true) {
3970
- await writeAllFindHits(
3971
- async (cursor) => await libraries.search(target, args.query, {
3972
- ...findOptions,
3973
- ...cursor === void 0 ? {} : { cursor }
3974
- }),
3975
- context,
3976
- args.format ?? "text"
3977
- );
4003
+ await writeAllFindHits(search, context, args.format ?? "text");
3978
4004
  return;
3979
4005
  }
3980
4006
  await writeFindHits(
3981
- await libraries.search(target, args.query, findOptions),
4007
+ await search(args.cursor),
3982
4008
  context,
3983
4009
  args.format ?? "text"
3984
4010
  );
@@ -4119,6 +4145,7 @@ async function runLibraryIndexArchiveCommand(args, target) {
4119
4145
  ...args.limit === void 0 ? {} : { limit: args.limit },
4120
4146
  ...args.reverse === true ? { order: "doc-desc" } : {},
4121
4147
  ...args.query === void 0 ? {} : { query: args.query },
4148
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
4122
4149
  ...args.role === void 0 ? {} : { role: args.role },
4123
4150
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
4124
4151
  ...createOptionalSourceContext(args)
@@ -4153,6 +4180,7 @@ async function runLibraryIndexArchiveCommand(args, target) {
4153
4180
  ...args.limit === void 0 ? {} : { limit: args.limit },
4154
4181
  ...args.reverse === true ? { order: "doc-desc" } : {},
4155
4182
  ...args.query === void 0 ? {} : { query: args.query },
4183
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
4156
4184
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
4157
4185
  ...createOptionalSourceContext(args)
4158
4186
  }),
@@ -4168,6 +4196,7 @@ async function runLibraryIndexArchiveCommand(args, target) {
4168
4196
  ...args.limit === void 0 ? {} : { limit: args.limit },
4169
4197
  ...args.reverse === true ? { order: "doc-desc" } : {},
4170
4198
  ...args.query === void 0 ? {} : { query: args.query },
4199
+ ...args.queryMode === void 0 ? {} : { queryMode: args.queryMode },
4171
4200
  ...args.skipUnindexed === true ? { skipUnindexed: true } : {},
4172
4201
  ...createOptionalSourceContext(args)
4173
4202
  }),
@@ -4221,6 +4250,37 @@ var init_archive_command = __esm({
4221
4250
  }
4222
4251
  });
4223
4252
 
4253
+ // src/commands/archive-title.ts
4254
+ var archive_title_exports = {};
4255
+ __export(archive_title_exports, {
4256
+ runArchiveTitleCommand: () => runArchiveTitleCommand
4257
+ });
4258
+ async function runArchiveTitleCommand(args) {
4259
+ const archive = await getWikiGraphSDK().archives.open(
4260
+ parseCLIArchiveTarget(args.archivePath)
4261
+ );
4262
+ if (args.action === "clear") {
4263
+ await archive.setArchiveTitle(null);
4264
+ await writeTextToStdout("Cleared archive title.\n");
4265
+ return;
4266
+ }
4267
+ const title = args.title;
4268
+ if (title === void 0) {
4269
+ throw new Error("Missing archive title.");
4270
+ }
4271
+ const stored = await archive.setArchiveTitle(title);
4272
+ await writeTextToStdout(`${stored}
4273
+ `);
4274
+ }
4275
+ var init_archive_title = __esm({
4276
+ "src/commands/archive-title.ts"() {
4277
+ "use strict";
4278
+ init_context();
4279
+ init_archive_target();
4280
+ init_support();
4281
+ }
4282
+ });
4283
+
4224
4284
  // src/runtime/entry-context.ts
4225
4285
  var entry_context_exports = {};
4226
4286
  var init_entry_context = __esm({
@@ -7315,6 +7375,7 @@ var URI_HELP_TARGETS = [
7315
7375
  name: "archive-scope",
7316
7376
  predicates: ["create", "export", "inspect"]
7317
7377
  },
7378
+ { name: "archive-title-object", predicates: ["clear", "set"] },
7318
7379
  { name: "artifact-object", predicates: [] },
7319
7380
  {
7320
7381
  name: "chapter-collection-scope",
@@ -9110,6 +9171,7 @@ function parseArchiveArguments(action, positionals, values, helpRoute = `wg ${ac
9110
9171
  );
9111
9172
  }
9112
9173
  rejectNonQuerySkipUnindexedFlag(action, values, helpRoute);
9174
+ const queryMode = parseQueryModeFlag(values, helpRoute);
9113
9175
  switch (action) {
9114
9176
  case "create": {
9115
9177
  rejectArchiveExtraPositionals(action, positionals, 1, helpRoute);
@@ -9287,6 +9349,7 @@ function parseArchiveArguments(action, positionals, values, helpRoute = `wg ${ac
9287
9349
  )
9288
9350
  },
9289
9351
  query,
9352
+ ...queryMode,
9290
9353
  ...values["skip-unindexed"] === true ? { skipUnindexed: true } : {},
9291
9354
  ...options.defaultKinds === void 0 ? {} : { kinds: options.defaultKinds },
9292
9355
  ...options.triplePattern === void 0 ? {} : { triplePattern: options.triplePattern }
@@ -9407,6 +9470,7 @@ function parseArchiveArguments(action, positionals, values, helpRoute = `wg ${ac
9407
9470
  },
9408
9471
  objectId: archivePath,
9409
9472
  ...values.query === void 0 ? {} : { query: values.query },
9473
+ ...queryMode,
9410
9474
  ...values.reverse === true ? { reverse: true } : {},
9411
9475
  ...values["skip-unindexed"] === true ? { skipUnindexed: true } : {},
9412
9476
  ...relatedTarget === "entity" ? parseRelatedRoleFlag(values.role, helpRoute) : {}
@@ -9451,6 +9515,7 @@ function parseArchiveArguments(action, positionals, values, helpRoute = `wg ${ac
9451
9515
  },
9452
9516
  objectId: archivePath,
9453
9517
  ...values.query === void 0 ? {} : { query: values.query },
9518
+ ...queryMode,
9454
9519
  ...values.reverse === true ? { reverse: true } : {},
9455
9520
  ...values["skip-unindexed"] === true ? { skipUnindexed: true } : {}
9456
9521
  },
@@ -9549,6 +9614,24 @@ function rejectNonQuerySkipUnindexedFlag(action, values, helpRoute) {
9549
9614
  helpRoute
9550
9615
  );
9551
9616
  }
9617
+ function parseQueryModeFlag(values, helpRoute) {
9618
+ const value = values["query-mode"];
9619
+ if (value === void 0) return {};
9620
+ if (values.query === void 0) {
9621
+ throw new Error(
9622
+ withHelpRoute("`--query-mode` requires `--query`.", helpRoute)
9623
+ );
9624
+ }
9625
+ if (value !== "hybrid" && value !== "fts" && value !== "embedding") {
9626
+ throw new Error(
9627
+ withHelpRoute(
9628
+ "--query-mode must be one of: hybrid, fts, embedding.",
9629
+ helpRoute
9630
+ )
9631
+ );
9632
+ }
9633
+ return { queryMode: value };
9634
+ }
9552
9635
 
9553
9636
  // src/args/parse.ts
9554
9637
  var import_util = require("util");
@@ -10436,6 +10519,9 @@ function classifyArchiveUriHelpTarget(uri) {
10436
10519
  if (path === "index") {
10437
10520
  return "index-object";
10438
10521
  }
10522
+ if (path === "title") {
10523
+ return "archive-title-object";
10524
+ }
10439
10525
  if (/^artifact\/[0-9a-f]{12,64}(?:#.+)?$/iu.test(path)) {
10440
10526
  return "artifact-object";
10441
10527
  }
@@ -10602,6 +10688,48 @@ function parseArchiveUriTargetArguments(uri, action, tail, values) {
10602
10688
  if (objectUri === "wikg://index") {
10603
10689
  return parseArchiveIndexUriArguments(archivePath, action, tail, values);
10604
10690
  }
10691
+ if (objectUri === "wikg://title") {
10692
+ if (action === "get") {
10693
+ return parseArchiveArguments("get", [uri, ...tail], values, helpRoute);
10694
+ }
10695
+ if (action !== "set" && action !== "clear") {
10696
+ throw new Error(
10697
+ withHelpRoute(
10698
+ `The archive title resource does not support \`${action}\`. Read it directly, or use set or clear.`,
10699
+ "wg <archive-uri>/title --help"
10700
+ )
10701
+ );
10702
+ }
10703
+ const expected = action === "set" ? 1 : 0;
10704
+ if (tail.length !== expected) {
10705
+ throw new Error(
10706
+ withHelpRoute(
10707
+ action === "set" ? "Archive title set requires exactly one title value." : "Archive title clear does not accept a value.",
10708
+ helpRoute
10709
+ )
10710
+ );
10711
+ }
10712
+ const unsupported = Object.entries(values).find(
10713
+ ([key, value]) => key !== "help" && value !== void 0 && value !== false
10714
+ );
10715
+ if (unsupported !== void 0) {
10716
+ throw new Error(
10717
+ withHelpRoute(
10718
+ `Archive title ${action} does not support --${unsupported[0]}.`,
10719
+ helpRoute
10720
+ )
10721
+ );
10722
+ }
10723
+ return {
10724
+ args: {
10725
+ action,
10726
+ archivePath,
10727
+ ...tail[0] === void 0 ? {} : { title: tail[0] }
10728
+ },
10729
+ help: false,
10730
+ kind: "archive-title"
10731
+ };
10732
+ }
10605
10733
  const chapterTarget = parseChapterTarget(objectUri);
10606
10734
  if (chapterTarget !== void 0) {
10607
10735
  return parseArchiveChapterUriArguments(
@@ -11530,7 +11658,7 @@ function parseLibraryUriFirstArguments(positionals, values) {
11530
11658
  if (target === void 0) {
11531
11659
  throw new Error(`Expected a Wiki Graph library URI: ${uri}`);
11532
11660
  }
11533
- const action = explicitAction ?? (target.kind === "scope" && (target.objectUri !== void 0 && target.objectUri !== "wikg://index" || values.query !== void 0 || values.limit !== void 0 || values.cursor !== void 0) ? resolveImplicitLibraryQueryAction(target.objectUri, values.query) : target.kind === "scope" || target.kind === "archive-collection" || target.kind === "metadata" || target.kind === "path" || target.kind === "archive" || target.kind === "archive-path" || target.objectUri === "wikg://index" ? "get" : target.kind === "archive-tree" ? "archive-tree" : "list");
11661
+ const action = explicitAction ?? ((target.kind === "scope" || target.kind === "archive-collection") && (target.kind === "scope" && target.objectUri !== void 0 && target.objectUri !== "wikg://index" || values.query !== void 0 || target.kind === "scope" && values.limit !== void 0 || target.kind === "scope" && values.cursor !== void 0) ? resolveImplicitLibraryQueryAction(target.objectUri, values.query) : target.kind === "scope" || target.kind === "archive-collection" || target.kind === "metadata" || target.kind === "path" || target.kind === "archive" || target.kind === "archive-path" || target.objectUri === "wikg://index" ? "get" : target.kind === "archive-tree" ? "archive-tree" : "list");
11534
11662
  if (action === "inspect" && target.kind !== "archive") {
11535
11663
  throw new Error(
11536
11664
  withHelpRoute(
@@ -11583,6 +11711,15 @@ function parseLibraryUriFirstArguments(positionals, values) {
11583
11711
  values
11584
11712
  );
11585
11713
  }
11714
+ if (target.kind === "archive-collection" && (action === "search" || values.query !== void 0)) {
11715
+ return parseLibraryQueryArguments(
11716
+ uri,
11717
+ target,
11718
+ action,
11719
+ explicitAction === void 0 ? [] : positionals.slice(2),
11720
+ values
11721
+ );
11722
+ }
11586
11723
  if (target.kind === "archive-collection") {
11587
11724
  return parseLibraryArchiveCollectionArguments(
11588
11725
  uri,
@@ -12664,6 +12801,9 @@ function parseCLIArguments(argv = process.argv.slice(2)) {
12664
12801
  query: {
12665
12802
  type: "string"
12666
12803
  },
12804
+ "query-mode": {
12805
+ type: "string"
12806
+ },
12667
12807
  replace: {
12668
12808
  type: "boolean"
12669
12809
  },
@@ -12851,6 +12991,10 @@ async function runArchiveCommand2(args) {
12851
12991
  const command = await Promise.resolve().then(() => (init_archive_command(), archive_command_exports));
12852
12992
  return command.runArchiveCommand(args);
12853
12993
  }
12994
+ async function runArchiveTitleCommand2(args) {
12995
+ const command = await Promise.resolve().then(() => (init_archive_title(), archive_title_exports));
12996
+ return command.runArchiveTitleCommand(args);
12997
+ }
12854
12998
  async function runArchiveChapterCommand2(args) {
12855
12999
  const command = await Promise.resolve().then(() => (init_chapter(), chapter_exports));
12856
13000
  return command.runArchiveChapterCommand(args);
@@ -12950,6 +13094,9 @@ async function dispatchWikiGraphCLI(input) {
12950
13094
  case "archive":
12951
13095
  await runArchiveCommand2(parsed.args);
12952
13096
  return { exitCode: 0 };
13097
+ case "archive-title":
13098
+ await runArchiveTitleCommand2(parsed.args);
13099
+ return { exitCode: 0 };
12953
13100
  case "archive-index":
12954
13101
  await runArchiveIndexCommand2(parsed.args);
12955
13102
  return { exitCode: 0 };