@kweaver-ai/kweaver-sdk 0.8.2 → 0.8.4

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 (107) hide show
  1. package/README.md +26 -52
  2. package/README.zh.md +27 -46
  3. package/dist/api/agent-chat.d.ts +10 -2
  4. package/dist/api/agent-chat.js +19 -5
  5. package/dist/api/datasources.d.ts +14 -0
  6. package/dist/api/datasources.js +14 -0
  7. package/dist/api/resources.d.ts +94 -0
  8. package/dist/api/resources.js +166 -0
  9. package/dist/cli.js +103 -23
  10. package/dist/client.d.ts +10 -4
  11. package/dist/client.js +12 -6
  12. package/dist/commands/agent-members.js +27 -11
  13. package/dist/commands/agent.js +383 -272
  14. package/dist/commands/auth.js +184 -71
  15. package/dist/commands/bkn-metric.js +37 -16
  16. package/dist/commands/bkn-ops.d.ts +1 -1
  17. package/dist/commands/bkn-ops.js +192 -93
  18. package/dist/commands/bkn-query.js +99 -31
  19. package/dist/commands/bkn-schema.d.ts +3 -3
  20. package/dist/commands/bkn-schema.js +127 -86
  21. package/dist/commands/bkn.js +158 -116
  22. package/dist/commands/call.js +23 -13
  23. package/dist/commands/config.js +22 -12
  24. package/dist/commands/context-loader.js +98 -92
  25. package/dist/commands/dataflow.js +14 -6
  26. package/dist/commands/ds.d.ts +0 -31
  27. package/dist/commands/ds.js +18 -426
  28. package/dist/commands/explore-bkn.d.ts +7 -1
  29. package/dist/commands/explore-bkn.js +32 -3
  30. package/dist/commands/explore.js +18 -15
  31. package/dist/commands/model.js +53 -42
  32. package/dist/commands/resource.d.ts +1 -0
  33. package/dist/commands/{dataview.js → resource.js} +62 -84
  34. package/dist/commands/skill.js +201 -65
  35. package/dist/commands/token.js +11 -0
  36. package/dist/commands/tool.js +46 -29
  37. package/dist/commands/toolbox.js +31 -15
  38. package/dist/commands/vega.js +466 -250
  39. package/dist/help/format.d.ts +65 -0
  40. package/dist/help/format.js +141 -0
  41. package/dist/index.d.ts +3 -3
  42. package/dist/index.js +2 -2
  43. package/dist/resources/datasources.d.ts +7 -0
  44. package/dist/resources/datasources.js +7 -0
  45. package/dist/resources/{dataviews.d.ts → resources.d.ts} +10 -11
  46. package/dist/resources/{dataviews.js → resources.js} +12 -13
  47. package/dist/templates/explorer/bkn.js +860 -9
  48. package/dist/templates/explorer/index.html +1 -0
  49. package/dist/templates/explorer/style.css +225 -0
  50. package/dist/templates/explorer/vendor/g6.min.js +68 -0
  51. package/dist/trace-ai/eval-set/schemas.d.ts +1 -0
  52. package/dist/trace-ai/eval-set/schemas.js +4 -0
  53. package/dist/trace-ai/eval-set/types.d.ts +2 -0
  54. package/dist/trace-ai/exp/capture-fingerprint.d.ts +10 -0
  55. package/dist/trace-ai/exp/capture-fingerprint.js +12 -0
  56. package/dist/trace-ai/exp/context/context-assembler.d.ts +18 -0
  57. package/dist/trace-ai/exp/context/context-assembler.js +42 -0
  58. package/dist/trace-ai/exp/context/failure-analyzer.d.ts +22 -0
  59. package/dist/trace-ai/exp/context/failure-analyzer.js +59 -0
  60. package/dist/trace-ai/exp/context/kn-data-prober.d.ts +13 -0
  61. package/dist/trace-ai/exp/context/kn-data-prober.js +38 -0
  62. package/dist/trace-ai/exp/context/kn-schema-client.d.ts +14 -0
  63. package/dist/trace-ai/exp/context/kn-schema-client.js +41 -0
  64. package/dist/trace-ai/exp/context/retrieval-health.d.ts +32 -0
  65. package/dist/trace-ai/exp/context/retrieval-health.js +138 -0
  66. package/dist/trace-ai/exp/context/vega-catalog-client.d.ts +14 -0
  67. package/dist/trace-ai/exp/context/vega-catalog-client.js +15 -0
  68. package/dist/trace-ai/exp/coordinator.d.ts +34 -21
  69. package/dist/trace-ai/exp/coordinator.js +246 -24
  70. package/dist/trace-ai/exp/eval-runner.js +4 -2
  71. package/dist/trace-ai/exp/exp-store/events-jsonl.d.ts +1 -0
  72. package/dist/trace-ai/exp/exp-store/events-jsonl.js +18 -0
  73. package/dist/trace-ai/exp/exp-store/expected-fingerprint.d.ts +3 -0
  74. package/dist/trace-ai/exp/exp-store/expected-fingerprint.js +31 -0
  75. package/dist/trace-ai/exp/exp-store/index.d.ts +63 -2
  76. package/dist/trace-ai/exp/exp-store/index.js +2 -1
  77. package/dist/trace-ai/exp/exp-store/rollback-yaml.d.ts +12 -0
  78. package/dist/trace-ai/exp/exp-store/rollback-yaml.js +29 -0
  79. package/dist/trace-ai/exp/index.d.ts +2 -0
  80. package/dist/trace-ai/exp/index.js +68 -3
  81. package/dist/trace-ai/exp/info.js +1 -1
  82. package/dist/trace-ai/exp/patch/index.d.ts +13 -2
  83. package/dist/trace-ai/exp/patch/index.js +65 -10
  84. package/dist/trace-ai/exp/patch/kn-api-client.d.ts +40 -0
  85. package/dist/trace-ai/exp/patch/kn-api-client.js +14 -0
  86. package/dist/trace-ai/exp/patch/kn.d.ts +8 -0
  87. package/dist/trace-ai/exp/patch/kn.js +36 -0
  88. package/dist/trace-ai/exp/patch/skill-api-client.d.ts +17 -0
  89. package/dist/trace-ai/exp/patch/skill-api-client.js +14 -0
  90. package/dist/trace-ai/exp/patch/skill-content.d.ts +9 -0
  91. package/dist/trace-ai/exp/patch/skill-content.js +12 -0
  92. package/dist/trace-ai/exp/preflight.d.ts +77 -0
  93. package/dist/trace-ai/exp/preflight.js +148 -0
  94. package/dist/trace-ai/exp/providers/synthesizer-client.d.ts +3 -14
  95. package/dist/trace-ai/exp/providers/synthesizer-client.js +53 -35
  96. package/dist/trace-ai/exp/providers/triage-client.d.ts +15 -2
  97. package/dist/trace-ai/exp/providers/triage-client.js +143 -28
  98. package/dist/trace-ai/exp/run-preflight.d.ts +19 -0
  99. package/dist/trace-ai/exp/run-preflight.js +56 -0
  100. package/dist/trace-ai/exp/schemas.d.ts +402 -44
  101. package/dist/trace-ai/exp/schemas.js +131 -18
  102. package/dist/utils/deprecation.d.ts +1 -0
  103. package/dist/utils/deprecation.js +18 -0
  104. package/package.json +2 -1
  105. package/dist/api/dataviews.d.ts +0 -117
  106. package/dist/api/dataviews.js +0 -265
  107. package/dist/commands/dataview.d.ts +0 -8
@@ -6,13 +6,15 @@ import { prepareBknDirectoryForImport, stripBknEncodingCliArgs, } from "../utils
6
6
  import { ensureValidToken, formatHttpError } from "../auth/oauth.js";
7
7
  import { createKnowledgeNetwork, createObjectTypes, deleteKnowledgeNetwork, buildKnowledgeNetwork, getBuildStatus, } from "../api/knowledge-networks.js";
8
8
  import { listTablesWithColumns, scanDatasourceMetadata } from "../api/vega.js";
9
- import { createDataView, findDataView } from "../api/dataviews.js";
9
+ import { createResource, findResource } from "../api/resources.js";
10
10
  import { resolveFiles } from "./ds.js";
11
11
  import { buildTableName } from "./import-csv.js";
12
12
  import { downloadBkn, uploadBkn, listActionSchedules, getActionSchedule, createActionSchedule, updateActionSchedule, setActionScheduleStatus, deleteActionSchedules, listJobs, getJob, getJobTasks, deleteJobs, } from "../api/bkn-backend.js";
13
13
  import { formatCallOutput } from "./call.js";
14
14
  import { resolveBusinessDomain } from "../config/store.js";
15
15
  import { runDsImportCsv } from "./ds.js";
16
+ import { renderHelp } from "../help/format.js";
17
+ import { warnDeprecated } from "../utils/deprecation.js";
16
18
  import { pollWithBackoff, detectDisplayKey, formatPkDetectionError, parsePkMap, resolvePrimaryKey, confirmYes, assertVegaCatalogId, } from "./bkn-utils.js";
17
19
  // ── BKN object name validation ──────────────────────────────────────────────
18
20
  // Mirrors bkn-backend OBJECT_NAME_MAX_LENGTH (interfaces/common.go:28) and
@@ -35,15 +37,22 @@ export function assertValidBknObjectNames(names, context) {
35
37
  `(1..${BKN_OBJECT_NAME_MAX_LENGTH} utf-8 chars):\n${lines.join("\n")}`);
36
38
  }
37
39
  // ── Build ───────────────────────────────────────────────────────────────────
38
- const KN_BUILD_HELP = `kweaver bkn build <kn-id> [options]
39
-
40
- Trigger a full build for a knowledge network.
41
-
42
- Options:
43
- --wait (default) Poll until build completes
44
- --no-wait Return immediately after triggering
45
- --timeout <seconds> Max wait time when --wait (default: 300)
46
- -bd, --biz-domain Business domain (default: bd_public)`;
40
+ const KN_BUILD_HELP = renderHelp({
41
+ tagline: "Trigger a full build for a knowledge network",
42
+ usage: "kweaver bkn build <kn-id> [flags]",
43
+ flags: [
44
+ { name: "--wait", desc: "Poll until build completes (default)" },
45
+ { name: "--no-wait", desc: "Return immediately after triggering" },
46
+ { name: "--timeout <seconds>", desc: "Max wait time when --wait (default: 300)" },
47
+ { name: "-bd, --biz-domain <s>", desc: "Business domain (default: bd_public)" },
48
+ ],
49
+ inheritedFlags: "--base-url, --token, --user, --help",
50
+ examples: [
51
+ "kweaver bkn build kn-123",
52
+ "kweaver bkn build kn-123 --no-wait",
53
+ "kweaver bkn build kn-123 --wait --timeout 600",
54
+ ],
55
+ });
47
56
  export function parseKnBuildArgs(args) {
48
57
  let knId = "";
49
58
  let wait = true;
@@ -349,25 +358,52 @@ export function extractTarToDirectory(tarBuffer, dirPath) {
349
358
  throw new Error(`tar extract failed: ${result.stderr?.toString() ?? result.status}`);
350
359
  }
351
360
  }
352
- const KN_PUSH_HELP = `kweaver bkn push <directory> [options]
353
-
354
- Pack a BKN directory into a tar and upload to import as a knowledge network.
355
-
356
- Options:
357
- --branch <s> Branch name (default: main)
358
- -bd, --biz-domain Business domain (default: bd_public)
359
- --pretty Pretty-print JSON output
360
- --detect-encoding Detect .bkn encoding and normalize to UTF-8 (default: on)
361
- --no-detect-encoding Do not detect; require UTF-8 .bkn files
362
- --source-encoding <name> Decode all .bkn files with this encoding (e.g. gb18030); overrides detection`;
363
- const KN_PULL_HELP = `kweaver bkn pull <kn-id> [<directory>] [options]
364
-
365
- Download a BKN tar from a knowledge network and extract to a local directory.
366
-
367
- Options:
368
- <directory> Output directory (default: <kn-id>)
369
- --branch <s> Branch name (default: main)
370
- -bd, --biz-domain Business domain (default: bd_public)`;
361
+ const KN_PUSH_HELP = renderHelp({
362
+ tagline: "Pack a BKN directory into a tar and upload to import as a knowledge network",
363
+ usage: "kweaver bkn push <directory> [flags]",
364
+ flags: [
365
+ {
366
+ title: "Target",
367
+ flags: [
368
+ { name: "--branch <s>", desc: "Branch name (default: main)" },
369
+ { name: "-bd, --biz-domain <s>", desc: "Business domain (default: bd_public)" },
370
+ ],
371
+ },
372
+ {
373
+ title: "Encoding",
374
+ flags: [
375
+ { name: "--detect-encoding", desc: "Detect .bkn encoding and normalize to UTF-8 (default: on)" },
376
+ { name: "--no-detect-encoding", desc: "Do not detect; require UTF-8 .bkn files" },
377
+ { name: "--source-encoding <name>", desc: "Decode all .bkn files with this encoding, e.g. gb18030 (overrides detection)" },
378
+ ],
379
+ },
380
+ {
381
+ title: "Output",
382
+ flags: [{ name: "--pretty", desc: "Pretty-print JSON output" }],
383
+ },
384
+ ],
385
+ inheritedFlags: "--base-url, --token, --user, --help",
386
+ examples: [
387
+ "kweaver bkn push ./my-network",
388
+ "kweaver bkn push ./my-network --branch feature/v2",
389
+ "kweaver bkn push ./legacy --source-encoding gb18030",
390
+ ],
391
+ });
392
+ const KN_PULL_HELP = renderHelp({
393
+ tagline: "Download a BKN tar from a knowledge network and extract to a local directory",
394
+ usage: "kweaver bkn pull <kn-id> [<directory>] [flags]",
395
+ flags: [
396
+ { name: "<directory>", desc: "Output directory (default: <kn-id>)" },
397
+ { name: "--branch <s>", desc: "Branch name (default: main)" },
398
+ { name: "-bd, --biz-domain <s>", desc: "Business domain (default: bd_public)" },
399
+ ],
400
+ inheritedFlags: "--base-url, --token, --user, --help",
401
+ examples: [
402
+ "kweaver bkn pull kn-123",
403
+ "kweaver bkn pull kn-123 ./out",
404
+ "kweaver bkn pull kn-123 ./out --branch feature/v2",
405
+ ],
406
+ });
371
407
  export async function runKnPushCommand(args) {
372
408
  let options;
373
409
  try {
@@ -472,24 +508,47 @@ export async function runKnPullCommand(args) {
472
508
  return 1;
473
509
  }
474
510
  }
475
- // ── Create from datasource ──────────────────────────────────────────────────
476
- const KN_CREATE_FROM_DS_HELP = `kweaver bkn create-from-ds <vega-catalog-id> --name X [options]
477
-
478
- Create a knowledge network from a vega catalog datasource (dataviews + object types + optional build).
479
- <vega-catalog-id> is a vega catalog id (use \`kweaver vega catalog list\` to find one;
480
- legacy data-connection datasource UUIDs are no longer accepted).
481
-
482
- Options:
483
- --name <s> Knowledge network name (required)
484
- --tables <a,b> Comma-separated table names (default: all)
485
- --pk-map <s> Explicit primary keys: <table>:<field>[,<table>:<field>...]
486
- Required when auto-detection fails (no unique column in sample)
487
- --build (default) Build after creation
488
- --no-build Skip build after creation
489
- --timeout <n> Build timeout in seconds (default: 300)
490
- --no-rollback Keep partially-created KN on failure (debug; default: rollback)
491
- -bd, --biz-domain Business domain (default: bd_public)
492
- --pretty Pretty-print output (default)`;
511
+ // ── Create from catalog (formerly create-from-ds) ──────────────────────────
512
+ const CREATE_FROM_CATALOG_FLAGS = [
513
+ { name: "--name <s>", desc: "Knowledge network name (required)" },
514
+ { name: "--tables <a,b>", desc: "Comma-separated table names (default: all)" },
515
+ { name: "--pk-map <s>", desc: "Explicit primary keys <table>:<field>[,...]; required when auto-detection fails" },
516
+ { name: "--build", desc: "Build after creation (default)" },
517
+ { name: "--no-build", desc: "Skip build after creation" },
518
+ { name: "--timeout <n>", desc: "Build timeout in seconds (default: 300)" },
519
+ { name: "--no-rollback", desc: "Keep partially-created KN on failure (debug; default: rollback)" },
520
+ { name: "-bd, --biz-domain <s>", desc: "Business domain (default: bd_public)" },
521
+ { name: "--pretty", desc: "Pretty-print output (default)" },
522
+ ];
523
+ const KN_CREATE_FROM_CATALOG_HELP = renderHelp({
524
+ tagline: "Create a knowledge network from a vega catalog (resources + object types + optional build).",
525
+ usage: "kweaver bkn create-from-catalog <vega-catalog-id> --name X [flags]",
526
+ flags: CREATE_FROM_CATALOG_FLAGS,
527
+ inheritedFlags: "--base-url, --token, --user, --help",
528
+ examples: [
529
+ "kweaver bkn create-from-catalog vcat-123 --name customers",
530
+ "kweaver bkn create-from-catalog vcat-123 --name orders --tables orders,items --no-build",
531
+ ],
532
+ learnMore: [
533
+ "<vega-catalog-id> is a vega catalog id (use `kweaver vega catalog list` to find one)",
534
+ "Legacy data-connection datasource UUIDs are no longer accepted",
535
+ "`kweaver bkn create-from-ds` is kept as a deprecated alias for back-compat",
536
+ ],
537
+ });
538
+ const KN_CREATE_FROM_DS_HELP = renderHelp({
539
+ tagline: "[DEPRECATED] Alias for `kweaver bkn create-from-catalog`. Subcommand name retained for back-compat; flags and behavior identical.",
540
+ usage: "kweaver bkn create-from-ds <vega-catalog-id> --name X [flags]",
541
+ flags: CREATE_FROM_CATALOG_FLAGS,
542
+ inheritedFlags: "--base-url, --token, --user, --help",
543
+ examples: [
544
+ "kweaver bkn create-from-ds vcat-123 --name customers",
545
+ "kweaver bkn create-from-ds vcat-123 --name orders --tables orders,items --no-build",
546
+ ],
547
+ learnMore: [
548
+ "Prefer `kweaver bkn create-from-catalog` in new scripts.",
549
+ "<vega-catalog-id> is a vega catalog id (use `kweaver vega catalog list` to find one).",
550
+ ],
551
+ });
493
552
  export function parseKnCreateFromDsArgs(args) {
494
553
  let dsId = "";
495
554
  let name = "";
@@ -548,7 +607,7 @@ export function parseKnCreateFromDsArgs(args) {
548
607
  }
549
608
  const tables = tablesStr ? tablesStr.split(",").map((s) => s.trim()).filter(Boolean) : [];
550
609
  if (!dsId || !name) {
551
- throw new Error("Usage: kweaver bkn create-from-ds <ds-id> --name X [options]");
610
+ throw new Error("Usage: kweaver bkn create-from-catalog <vega-catalog-id> --name X [options]");
552
611
  }
553
612
  assertVegaCatalogId(dsId);
554
613
  const pkMap = pkMapStr ? parsePkMap(pkMapStr) : {};
@@ -564,7 +623,7 @@ function sanitizeBknId(name) {
564
623
  export function generateObjectTypeBkn(tableName, dvId, pk, dk, columns) {
565
624
  const safeId = sanitizeBknId(tableName);
566
625
  const header = `## ObjectType: ${safeId}\n\n**${tableName}**\n`;
567
- const dsTable = `### Data Source\n\n| Type | ID | Name |\n|------|-----|------|\n| data_view | ${dvId} | ${tableName} |\n`;
626
+ const dsTable = `### Data Source\n\n| Type | ID | Name |\n|------|-----|------|\n| resource | ${dvId} | ${tableName} |\n`;
568
627
  const dpHeader = `### Data Properties\n\n| Property | Display Name | Type | Primary Key | Display Key |\n|----------|-------------|------|-------------|-------------|\n`;
569
628
  const dpRows = columns.map((c) => {
570
629
  const isPk = c.name === pk ? "yes" : "no";
@@ -574,19 +633,23 @@ export function generateObjectTypeBkn(tableName, dvId, pk, dk, columns) {
574
633
  const frontmatter = `---\ntype: object_type\nid: ${safeId}\nname: ${tableName}\n---\n\n`;
575
634
  return `${frontmatter}${header}\n${dsTable}\n${dpHeader}${dpRows}\n`;
576
635
  }
577
- export async function runKnCreateFromDsCommand(args, sampleRows) {
636
+ export async function runKnCreateFromCatalogCommand(args, sampleRows, invokedAs = "create-from-catalog") {
637
+ const help = invokedAs === "create-from-ds" ? KN_CREATE_FROM_DS_HELP : KN_CREATE_FROM_CATALOG_HELP;
578
638
  let options;
579
639
  try {
580
640
  options = parseKnCreateFromDsArgs(args);
581
641
  }
582
642
  catch (error) {
583
643
  if (error instanceof Error && error.message === "help") {
584
- console.log(KN_CREATE_FROM_DS_HELP);
644
+ console.log(help);
585
645
  return 0;
586
646
  }
587
647
  console.error(formatHttpError(error));
588
648
  return 1;
589
649
  }
650
+ if (invokedAs === "create-from-ds") {
651
+ warnDeprecated("kweaver bkn create-from-ds", "renamed to `kweaver bkn create-from-catalog`. The old name is kept as an alias and will be removed in a future major release.");
652
+ }
590
653
  try {
591
654
  const token = await ensureValidToken();
592
655
  const base = {
@@ -667,12 +730,12 @@ export async function runKnCreateFromDsCommand(args, sampleRows) {
667
730
  sampleSize: resolution.sampleSize ?? 0,
668
731
  }));
669
732
  }
670
- // Phase 1: Create DataViews for each table. findDataView is idempotent;
733
+ // Phase 1: Create vega-backend Resources for each table. findResource is idempotent;
671
734
  // not tracked for rollback so a retry can reuse what's already there.
672
- console.error(`Creating data views for ${targetTables.length} table(s) ...`);
735
+ console.error(`Creating resources for ${targetTables.length} table(s) ...`);
673
736
  const viewMap = {};
674
737
  for (const t of targetTables) {
675
- const found = await findDataView({
738
+ const found = await findResource({
676
739
  ...base,
677
740
  name: t.name,
678
741
  datasourceId: options.dsId,
@@ -680,7 +743,7 @@ export async function runKnCreateFromDsCommand(args, sampleRows) {
680
743
  wait: true,
681
744
  });
682
745
  const dvId = found[0]?.id ??
683
- (await createDataView({
746
+ (await createResource({
684
747
  ...base,
685
748
  name: t.name,
686
749
  datasourceId: options.dsId,
@@ -717,7 +780,7 @@ export async function runKnCreateFromDsCommand(args, sampleRows) {
717
780
  return {
718
781
  branch: "main",
719
782
  name: t.name,
720
- data_source: { type: "data_view", id: viewMap[t.name] },
783
+ data_source: { type: "resource", id: viewMap[t.name] },
721
784
  primary_keys: [pk],
722
785
  display_key: dk,
723
786
  data_properties: t.columns.map((c) => ({
@@ -806,24 +869,32 @@ export async function runKnCreateFromDsCommand(args, sampleRows) {
806
869
  }
807
870
  }
808
871
  // ── Create from CSV ─────────────────────────────────────────────────────────
809
- const KN_CREATE_FROM_CSV_HELP = `kweaver bkn create-from-csv <vega-catalog-id> --files <glob> --name X [options]
810
-
811
- Import CSV files into a vega catalog datasource, then create a knowledge network.
812
- <vega-catalog-id> is a vega catalog id (use \`kweaver vega catalog list\` to find one;
813
- legacy data-connection datasource UUIDs are no longer accepted).
814
-
815
- Options:
816
- --files <s> CSV file paths (comma-separated or glob, required)
817
- --name <s> Knowledge network name (required)
818
- --table-prefix <s> Table name prefix (default: none)
819
- --batch-size <n> Rows per batch (default: 500)
820
- --tables <a,b> Tables to include in KN (default: all imported)
821
- --build (default) Build after creation
822
- --no-build Skip build
823
- --pk-map <s> Explicit primary keys: <table>:<field>[,<table>:<field>...]
824
- --timeout <n> Build timeout in seconds (default: 300)
825
- --no-rollback Keep partially-created KN on failure (debug; default: rollback)
826
- -bd, --biz-domain Business domain (default: bd_public)`;
872
+ const KN_CREATE_FROM_CSV_HELP = renderHelp({
873
+ tagline: "Import CSV files into a vega catalog datasource, then create a knowledge network",
874
+ usage: "kweaver bkn create-from-csv <vega-catalog-id> --files <glob> --name X [flags]",
875
+ flags: [
876
+ { name: "--files <s>", desc: "CSV file paths (comma-separated or glob, required)" },
877
+ { name: "--name <s>", desc: "Knowledge network name (required)" },
878
+ { name: "--table-prefix <s>", desc: "Table name prefix (default: none)" },
879
+ { name: "--batch-size <n>", desc: "Rows per batch (default: 500)" },
880
+ { name: "--tables <a,b>", desc: "Tables to include in KN (default: all imported)" },
881
+ { name: "--build", desc: "Build after creation (default)" },
882
+ { name: "--no-build", desc: "Skip build" },
883
+ { name: "--pk-map <s>", desc: "Explicit primary keys <table>:<field>[,...]" },
884
+ { name: "--timeout <n>", desc: "Build timeout in seconds (default: 300)" },
885
+ { name: "--no-rollback", desc: "Keep partially-created KN on failure (debug; default: rollback)" },
886
+ { name: "-bd, --biz-domain <s>", desc: "Business domain (default: bd_public)" },
887
+ ],
888
+ inheritedFlags: "--base-url, --token, --user, --help",
889
+ examples: [
890
+ "kweaver bkn create-from-csv vcat-123 --files './data/*.csv' --name imports",
891
+ "kweaver bkn create-from-csv vcat-123 --files ./a.csv,./b.csv --name two --table-prefix raw_",
892
+ ],
893
+ learnMore: [
894
+ "<vega-catalog-id> is a vega catalog id (use `kweaver vega catalog list` to find one)",
895
+ "Legacy data-connection datasource UUIDs are no longer accepted",
896
+ ],
897
+ });
827
898
  export function parseKnCreateFromCsvArgs(args) {
828
899
  let dsId = "";
829
900
  let files = "";
@@ -894,7 +965,7 @@ export function parseKnCreateFromCsvArgs(args) {
894
965
  }
895
966
  const tables = tablesStr ? tablesStr.split(",").map((s) => s.trim()).filter(Boolean) : [];
896
967
  if (!dsId || !files || !name) {
897
- throw new Error("Usage: kweaver bkn create-from-csv <ds-id> --files <glob> --name X [options]");
968
+ throw new Error("Usage: kweaver bkn create-from-csv <vega-catalog-id> --files <glob> --name X [options]");
898
969
  }
899
970
  assertVegaCatalogId(dsId);
900
971
  const pkMap = pkMapStr ? parsePkMap(pkMapStr) : {};
@@ -944,7 +1015,7 @@ export async function runKnCreateFromCsvCommand(args) {
944
1015
  return importResult.code;
945
1016
  }
946
1017
  // (Phase 1.5 metadata scan removed — runDsImportCsv now self-scans on
947
- // success, and runKnCreateFromDsCommand's table-discovery retry triggers
1018
+ // success, and runKnCreateFromCatalogCommand's table-discovery retry triggers
948
1019
  // a scan if the catalog still lags. Two layers of fallback are enough.)
949
1020
  // Phase 2: Create KN from datasource
950
1021
  console.error("Phase 2: Creating knowledge network ...");
@@ -966,7 +1037,7 @@ export async function runKnCreateFromCsvCommand(args) {
966
1037
  : []),
967
1038
  ...(options.noRollback ? ["--no-rollback"] : []),
968
1039
  ];
969
- return runKnCreateFromDsCommand(knArgs, importResult.sampleRows);
1040
+ return runKnCreateFromCatalogCommand(knArgs, importResult.sampleRows, "create-from-catalog");
970
1041
  }
971
1042
  export function parseActionScheduleArgs(args) {
972
1043
  const [action, ...rest] = args;
@@ -1008,15 +1079,30 @@ export async function runKnActionScheduleCommand(args) {
1008
1079
  }
1009
1080
  catch (error) {
1010
1081
  if (error instanceof Error && error.message === "help") {
1011
- console.log(`kweaver bkn action-schedule <action> <kn-id> [args] [--pretty] [-bd value]
1012
-
1013
- Actions:
1014
- list <kn-id> List action schedules
1015
- get <kn-id> <schedule-id> Get schedule details
1016
- create <kn-id> '<json>' Create schedule
1017
- update <kn-id> <schedule-id> '<json>' Update schedule
1018
- set-status <kn-id> <schedule-id> <status> Enable/disable schedule (enabled|disabled)
1019
- delete <kn-id> <schedule-ids> [-y] Delete schedule(s) (comma-separated)`);
1082
+ console.log(renderHelp({
1083
+ tagline: "Manage action schedules for a KN",
1084
+ usage: "kweaver bkn action-schedule <action> <kn-id> [args] [--pretty] [-bd value]",
1085
+ sections: [{
1086
+ title: "AVAILABLE COMMANDS",
1087
+ items: [
1088
+ { name: "list", desc: "List action schedules" },
1089
+ { name: "get", desc: "Get schedule details" },
1090
+ { name: "create", desc: "Create schedule" },
1091
+ { name: "update", desc: "Update schedule" },
1092
+ { name: "set-status", desc: "Enable/disable schedule (enabled|disabled)" },
1093
+ { name: "delete", desc: "Delete schedule(s) (comma-separated)" },
1094
+ ],
1095
+ }],
1096
+ inheritedFlags: "--base-url, --token, --user, --help",
1097
+ examples: [
1098
+ "kweaver bkn action-schedule list <kn-id>",
1099
+ "kweaver bkn action-schedule get <kn-id> <schedule-id>",
1100
+ "kweaver bkn action-schedule create <kn-id> '<json>'",
1101
+ "kweaver bkn action-schedule update <kn-id> <schedule-id> '<json>'",
1102
+ "kweaver bkn action-schedule set-status <kn-id> <schedule-id> <status>",
1103
+ "kweaver bkn action-schedule delete <kn-id> <schedule-ids> [-y]",
1104
+ ],
1105
+ }));
1020
1106
  return 0;
1021
1107
  }
1022
1108
  console.error(formatHttpError(error));
@@ -1125,13 +1211,26 @@ export async function runKnJobCommand(args) {
1125
1211
  }
1126
1212
  catch (error) {
1127
1213
  if (error instanceof Error && error.message === "help") {
1128
- console.log(`kweaver bkn job <action> <kn-id> [args] [--pretty] [-bd value]
1129
-
1130
- Actions:
1131
- list <kn-id> List jobs
1132
- get <kn-id> <job-id> Get job details
1133
- tasks <kn-id> <job-id> List tasks within a job
1134
- delete <kn-id> <job-ids> [-y] Delete job(s) (comma-separated)`);
1214
+ console.log(renderHelp({
1215
+ tagline: "Manage jobs for a KN",
1216
+ usage: "kweaver bkn job <action> <kn-id> [args] [--pretty] [-bd value]",
1217
+ sections: [{
1218
+ title: "AVAILABLE COMMANDS",
1219
+ items: [
1220
+ { name: "list", desc: "List jobs" },
1221
+ { name: "get", desc: "Get job details" },
1222
+ { name: "tasks", desc: "List tasks within a job" },
1223
+ { name: "delete", desc: "Delete job(s) (comma-separated)" },
1224
+ ],
1225
+ }],
1226
+ inheritedFlags: "--base-url, --token, --user, --help",
1227
+ examples: [
1228
+ "kweaver bkn job list <kn-id>",
1229
+ "kweaver bkn job get <kn-id> <job-id>",
1230
+ "kweaver bkn job tasks <kn-id> <job-id>",
1231
+ "kweaver bkn job delete <kn-id> <job-ids> [-y]",
1232
+ ],
1233
+ }));
1135
1234
  return 0;
1136
1235
  }
1137
1236
  console.error(formatHttpError(error));
@@ -5,6 +5,7 @@ import { semanticSearch } from "../api/semantic-search.js";
5
5
  import { formatCallOutput } from "./call.js";
6
6
  import { resolveBusinessDomain } from "../config/store.js";
7
7
  import { parseOntologyQueryFlags } from "./bkn-utils.js";
8
+ import { renderHelp } from "../help/format.js";
8
9
  // ── subgraph ─────────────────────────────────────────────────────────────────
9
10
  export async function runKnSubgraphCommand(args) {
10
11
  let filteredArgs;
@@ -18,9 +19,18 @@ export async function runKnSubgraphCommand(args) {
18
19
  }
19
20
  catch (error) {
20
21
  if (error instanceof Error && error.message === "help") {
21
- console.log(`kweaver bkn subgraph <kn-id> '<json>' [--pretty] [-bd value]
22
-
23
- Query subgraph via ontology-query API. JSON body format see references/json-formats.md#subgraph.`);
22
+ console.log(renderHelp({
23
+ tagline: "Query subgraph via ontology-query API. JSON body format see references/json-formats.md#subgraph.",
24
+ usage: "kweaver bkn subgraph <kn-id> '<json>' [flags]",
25
+ flags: [
26
+ { name: "--pretty", desc: "Pretty-print JSON output" },
27
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
28
+ ],
29
+ inheritedFlags: "--base-url, --token, --user, --help",
30
+ examples: [
31
+ "kweaver bkn subgraph kn-123 '{\"source_object_type_id\":\"ot-1\"}'",
32
+ ],
33
+ }));
24
34
  return 0;
25
35
  }
26
36
  throw error;
@@ -80,9 +90,18 @@ export async function runKnActionExecutionCommand(args) {
80
90
  }
81
91
  catch (error) {
82
92
  if (error instanceof Error && error.message === "help") {
83
- console.log(`kweaver bkn action-execution get <kn-id> <execution-id> [--pretty] [-bd value]
84
-
85
- Get action execution status.`);
93
+ console.log(renderHelp({
94
+ tagline: "Get action execution status.",
95
+ usage: "kweaver bkn action-execution get <kn-id> <execution-id> [flags]",
96
+ flags: [
97
+ { name: "--pretty", desc: "Pretty-print JSON output" },
98
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
99
+ ],
100
+ inheritedFlags: "--base-url, --token, --user, --help",
101
+ examples: [
102
+ "kweaver bkn action-execution get kn-123 exec-456",
103
+ ],
104
+ }));
86
105
  return 0;
87
106
  }
88
107
  throw error;
@@ -113,12 +132,29 @@ Get action execution status.`);
113
132
  export async function runKnActionLogCommand(args) {
114
133
  const [action, ...rest] = args;
115
134
  if (!action || action === "--help" || action === "-h") {
116
- console.log(`kweaver bkn action-log list <kn-id> [options]
117
- kweaver bkn action-log get <kn-id> <log-id> [options]
118
- kweaver bkn action-log cancel <kn-id> <log-id> [options]
119
-
120
- List/get execution logs. cancel has side effects - only use when explicitly requested.
121
- Options for list: --limit, --need-total, --action-type-id, --status, --trigger-type, --search-after`);
135
+ console.log(renderHelp({
136
+ tagline: "List/get execution logs. cancel has side effects - only use when explicitly requested.",
137
+ usage: [
138
+ "kweaver bkn action-log list <kn-id> [flags]",
139
+ "kweaver bkn action-log get <kn-id> <log-id> [flags]",
140
+ "kweaver bkn action-log cancel <kn-id> <log-id> [flags]",
141
+ ],
142
+ flags: [
143
+ { name: "--limit <n>", desc: "Max log entries (list, default: 30)" },
144
+ { name: "--need-total <bool>", desc: "Include total count (list)" },
145
+ { name: "--action-type-id <s>", desc: "Filter by action type id (list)" },
146
+ { name: "--status <s>", desc: "Filter by status (list)" },
147
+ { name: "--trigger-type <s>", desc: "Filter by trigger type (list)" },
148
+ { name: "--search-after <s>", desc: "Pagination cursor (list)" },
149
+ { name: "--pretty", desc: "Pretty-print JSON output" },
150
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
151
+ ],
152
+ inheritedFlags: "--base-url, --token, --user, --help",
153
+ examples: [
154
+ "kweaver bkn action-log list kn-123 --limit 10",
155
+ "kweaver bkn action-log get kn-123 log-456",
156
+ ],
157
+ }));
122
158
  return 0;
123
159
  }
124
160
  let pretty = true;
@@ -233,16 +269,21 @@ Options for list: --limit, --need-total, --action-type-id, --status, --trigger-t
233
269
  }
234
270
  }
235
271
  // ── search ───────────────────────────────────────────────────────────────────
236
- const KN_SEARCH_HELP = `kweaver bkn search <kn-id> <query> [--max-concepts <n>] [--mode <mode>] [--pretty] [-bd value]
237
-
238
- Semantic search within a knowledge network via agent-retrieval API.
239
- Returns matched concepts (object types, relation types, action types).
240
-
241
- Options:
242
- --max-concepts <n> Max concepts to return (default: 10)
243
- --mode <mode> Search mode (default: keyword_vector_retrieval)
244
- --pretty Pretty-print JSON output
245
- -bd, --biz-domain Override x-business-domain`;
272
+ const KN_SEARCH_HELP = renderHelp({
273
+ tagline: "Semantic search within a knowledge network — matches object/relation/action types (agent-retrieval API)",
274
+ usage: "kweaver bkn search <kn-id> <query> [flags]",
275
+ flags: [
276
+ { name: "--max-concepts <n>", desc: "Max concepts to return (default: 10)" },
277
+ { name: "--mode <mode>", desc: "Search mode (default: keyword_vector_retrieval)" },
278
+ { name: "--pretty", desc: "Pretty-print JSON output" },
279
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
280
+ ],
281
+ inheritedFlags: "--base-url, --token, --user, --help",
282
+ examples: [
283
+ "kweaver bkn search kn-123 'customer churn'",
284
+ "kweaver bkn search kn-123 'revenue by region' --max-concepts 20",
285
+ ],
286
+ });
246
287
  export function parseKnSearchArgs(args) {
247
288
  let knId = "";
248
289
  let query = "";
@@ -324,18 +365,36 @@ export async function runKnRelationTypePathsCommand(args) {
324
365
  }
325
366
  catch (error) {
326
367
  if (error instanceof Error && error.message === "help") {
327
- console.log(`kweaver bkn relation-type-paths <kn-id> '<json>' [--pretty] [-bd value]
328
-
329
- Query relation type paths between object types.`);
368
+ console.log(renderHelp({
369
+ tagline: "Query relation type paths between object types.",
370
+ usage: "kweaver bkn relation-type-paths <kn-id> '<json>' [flags]",
371
+ flags: [
372
+ { name: "--pretty", desc: "Pretty-print JSON output" },
373
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
374
+ ],
375
+ inheritedFlags: "--base-url, --token, --user, --help",
376
+ examples: [
377
+ "kweaver bkn relation-type-paths kn-123 '{...}'",
378
+ ],
379
+ }));
330
380
  return 0;
331
381
  }
332
382
  throw error;
333
383
  }
334
384
  const [knId, body] = parsed.filteredArgs;
335
385
  if (!knId || !body) {
336
- console.log(`kweaver bkn relation-type-paths <kn-id> '<json>' [--pretty] [-bd value]
337
-
338
- Query relation type paths between object types.`);
386
+ console.log(renderHelp({
387
+ tagline: "Query relation type paths between object types.",
388
+ usage: "kweaver bkn relation-type-paths <kn-id> '<json>' [flags]",
389
+ flags: [
390
+ { name: "--pretty", desc: "Pretty-print JSON output" },
391
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
392
+ ],
393
+ inheritedFlags: "--base-url, --token, --user, --help",
394
+ examples: [
395
+ "kweaver bkn relation-type-paths kn-123 '{...}'",
396
+ ],
397
+ }));
339
398
  return knId && !body ? 1 : 0;
340
399
  }
341
400
  const token = await ensureValidToken();
@@ -357,9 +416,18 @@ export async function runKnResourcesCommand(args) {
357
416
  }
358
417
  catch (error) {
359
418
  if (error instanceof Error && error.message === "help") {
360
- console.log(`kweaver bkn resources [--pretty] [-bd value]
361
-
362
- List available resources.`);
419
+ console.log(renderHelp({
420
+ tagline: "List available resources.",
421
+ usage: "kweaver bkn resources [flags]",
422
+ flags: [
423
+ { name: "--pretty", desc: "Pretty-print JSON output" },
424
+ { name: "-bd, --biz-domain <s>", desc: "Override x-business-domain" },
425
+ ],
426
+ inheritedFlags: "--base-url, --token, --user, --help",
427
+ examples: [
428
+ "kweaver bkn resources --pretty",
429
+ ],
430
+ }));
363
431
  return 0;
364
432
  }
365
433
  throw error;
@@ -22,13 +22,13 @@ export type ObjectTypeCreateParsed = {
22
22
  } | {
23
23
  mode: "needsDataview";
24
24
  knId: string;
25
- dataviewId: string;
25
+ resourceId: string;
26
26
  entry: Record<string, unknown>;
27
27
  businessDomain: string;
28
28
  branch: string;
29
29
  pretty: boolean;
30
30
  };
31
- /** Parse object-type create args: --name --dataview-id --primary-key --display-key [--property '<json>' ...] */
31
+ /** Parse object-type create args: --name --resource-id --primary-key --display-key [--property '<json>' ...] */
32
32
  export declare function parseObjectTypeCreateArgs(args: string[]): ObjectTypeCreateParsed;
33
33
  /**
34
34
  * Load dataview fields and build data_properties (with mapped_field). Used when no --property flags.
@@ -36,7 +36,7 @@ export declare function parseObjectTypeCreateArgs(args: string[]): ObjectTypeCre
36
36
  export declare function finalizeObjectTypeCreateFromDataview(options: {
37
37
  baseUrl: string;
38
38
  accessToken: string;
39
- dataviewId: string;
39
+ resourceId: string;
40
40
  entry: Record<string, unknown>;
41
41
  businessDomain: string;
42
42
  }): Promise<string>;