@sixb/cli-core 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -27,6 +27,7 @@ sixb ontology get Customer
27
27
  sixb objects inspect Customer customer-123
28
28
  sixb objects list --type Customer
29
29
  sixb objects search "Northline"
30
+ sixb objects search "waterproof trail shoes" --type Product
30
31
  sixb telemetry latest Device device-1 temperature
31
32
  sixb actions list
32
33
  sixb actions request send-reminder --file input.json
@@ -37,6 +38,11 @@ sixb workflow-runs get run-456
37
38
  sixb files upload ./report.pdf
38
39
  ```
39
40
 
41
+ `objects search` matches identifiers and full-text fields across visible types. With `--type`, it
42
+ runs a semantic search through that type's vector profile and ranks results by `score`; pass
43
+ `--vector-profile <name>` when the type declares several. `sixb ontology list` shows each type's
44
+ `vectorProfiles`.
45
+
40
46
  Run `sixb <group> --help` for exact arguments and limits.
41
47
 
42
48
  Profile management, authentication, and server lifecycle commands belong to `@sixb/cli`.
@@ -1,6 +1,7 @@
1
1
  export declare function renderInstanceHelp(mode: "local" | "sandbox"): string;
2
+ export declare const SEARCH_HELP: string;
2
3
  export declare const OBJECTS_HELP: string;
3
- export declare const QUERY_HELP = "Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <exact|filter|incoming|expand|sort|page>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n vector, set, sort, limit, page, project, and expand are also supported.\n\nPredicates use op, not kind:\n and/or, not, {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"}, neq, lt, lte, gt, gte,\n in, exists, and contains.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nRun `sixb ontology get <type>` first; never guess property or link ids. Use refs for exact\nidentities. Put limits and pages inside the query tree.";
4
+ export declare const QUERY_HELP = "Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <exact|filter|incoming|expand|sort|page|vector>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n set, sort, limit, page, project, and expand are also supported.\n\nPredicates use op, not kind:\n and/or, not, {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"}, neq, lt, lte, gt, gte,\n in, exists, and contains.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nRun `sixb ontology get <type>` first; never guess property or link ids. Use refs for exact\nidentities. Put limits and pages inside the query tree.\n\nVector profile names are the keys of the type's search.vectors. Vector input is a start node,\noptionally under filters; k bounds the ranked matches and results carry a score.";
4
5
  export declare const GROUP_HELP: {
5
6
  readonly doctor: "Usage: sixb doctor";
6
7
  readonly context: "Usage: sixb context";
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/commands/metadata.ts"],"names":[],"mappings":"AA6DA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAEpE;AAED,eAAO,MAAM,YAAY,QA8CmB,CAAA;AAE5C,eAAO,MAAM,UAAU,i0CAuBiC,CAAA;AAExD,eAAO,MAAM,UAAU;;;;;;;;;;;CA2Db,CAAA;AAEV,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS3D,CAAA;AAED,eAAO,MAAM,cAAc,0HAC4E,CAAA"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/commands/metadata.ts"],"names":[],"mappings":"AA+DA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAEpE;AAQD,eAAO,MAAM,WAAW,QAON,CAAA;AAElB,eAAO,MAAM,YAAY,QAmDmB,CAAA;AAE5C,eAAO,MAAM,UAAU,imDA2B0D,CAAA;AAEjF,eAAO,MAAM,UAAU;;;;;;;;;;;CA2Db,CAAA;AAEV,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3D,CAAA;AAED,eAAO,MAAM,cAAc,0HAC4E,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/commands/objects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAsB9C,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpF"}
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/commands/objects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAuB9C,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ontology.d.ts","sourceRoot":"","sources":["../../src/commands/ontology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,wBAAsB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CrF"}
1
+ {"version":3,"file":"ontology.d.ts","sourceRoot":"","sources":["../../src/commands/ontology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,wBAAsB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CrF"}
@@ -11,5 +11,7 @@ export declare function singleFileOption(args: readonly string[], command: strin
11
11
  export declare function readJson(source: string): Promise<unknown>;
12
12
  export declare function asRecord(value: unknown): Record<string, unknown>;
13
13
  export declare function asRecords(value: unknown): Record<string, unknown>[];
14
+ /** Names of an object type definition's `search.vectors` profiles, in declaration order. */
15
+ export declare function vectorProfileNames(objectType: Record<string, unknown>): string[];
14
16
  export declare function isFileError(error: unknown, code: string): error is NodeJS.ErrnoException;
15
17
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE7D,wDAAwD;AAExD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,YAAY,CASd;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE;IACN,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B,GACA,YAAY,CAiBd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIhE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEnE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAExF"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE7D,wDAAwD;AAExD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,YAAY,CASd;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE;IACN,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B,GACA,YAAY,CAiBd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIhE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEnE;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAEhF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAExF"}
package/dist/index.js CHANGED
@@ -271,6 +271,7 @@ function formatAlternatives(values) {
271
271
  var CLI_LIMITS = {
272
272
  list: { default: 20, maximum: 1000 },
273
273
  search: { default: 20, maximum: 50 },
274
+ vectorSearchText: { maximum: 8000 },
274
275
  telemetryHistory: { default: 100, maximum: 1000 },
275
276
  linkPage: { default: 100, maximum: 1000 },
276
277
  inspect: {
@@ -305,7 +306,9 @@ Objects:
305
306
  sixb objects inspect <type> <id> Inspect an object and its related graph in one command
306
307
  sixb objects list [options] Browse materialized objects
307
308
  sixb objects get <type> <id>... Exact lookup through opaque object references
308
- sixb objects search <text> Search visible objects
309
+ sixb objects search <text> Search visible objects by id prefix and full text
310
+ sixb objects search <text> --type <type>
311
+ Semantic search through the type's vector profile
309
312
  sixb objects query --file <file|-> Execute query IR from JSON
310
313
  sixb objects count --file <file|-> Count a query without returning rows
311
314
  sixb objects exists --file <file|-> Test whether a query has a match
@@ -334,11 +337,24 @@ var LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace("Sixb agent CLI", "Sixb instance
334
337
  function renderInstanceHelp(mode) {
335
338
  return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP;
336
339
  }
340
+ var SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.
341
+ With --type, the server embeds the text with the profile's model and ranks results by score,
342
+ a cosine similarity where higher is closer. \`sixb ontology list\` shows each type's
343
+ vectorProfiles. To combine semantic search with filters, run
344
+ \`sixb objects query --example vector\`.`;
345
+ var SEARCH_HELP = `Usage:
346
+ sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
347
+ sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]
348
+
349
+ --limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several
350
+ profiles.
351
+
352
+ ${SEARCH_DETAILS}`;
337
353
  var OBJECTS_HELP = `Usage:
338
354
  sixb objects inspect <object-type> <primary-id> [options]
339
355
  sixb objects list [options]
340
356
  sixb objects get <object-type> <primary-id>...
341
- sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
357
+ sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]
342
358
  sixb objects query --file <path|-> [--include-total|--no-total]
343
359
  sixb objects query --example <name>
344
360
  sixb objects count --file <path|->
@@ -358,6 +374,11 @@ List options:
358
374
  --created-after|--created-before <RFC3339>
359
375
  --updated-after|--updated-before <RFC3339>
360
376
 
377
+ Search options:
378
+ --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}
379
+ --type <id> Semantic search through this type's vector profile
380
+ --vector-profile <name> Required when the type declares several profiles
381
+
361
382
  Links options:
362
383
  --link <link-id>
363
384
  --direction outgoing|incoming|both Defaults to both
@@ -377,13 +398,13 @@ default and returns a bounded graph.
377
398
  Inspect omits materialization timestamps and ontology definitions by default. Use \`--full\` when
378
399
  storage timestamps, declared links, or available actions are needed.
379
400
 
380
- Search returns at most ${CLI_LIMITS.search.maximum} matches and defaults to ${CLI_LIMITS.search.default}.
401
+ ${SEARCH_DETAILS}
381
402
 
382
403
  \`objects get\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or
383
404
  % are safe. Identifiers are case-sensitive.`;
384
405
  var QUERY_HELP = `Usage:
385
406
  sixb objects query --file <path|-> [--include-total|--no-total]
386
- sixb objects query --example <exact|filter|incoming|expand|sort|page>
407
+ sixb objects query --example <exact|filter|incoming|expand|sort|page|vector>
387
408
  sixb objects query --example list
388
409
 
389
410
  Input is a query node. A full {"query": ...} request is also accepted.
@@ -394,7 +415,8 @@ Query nodes compose through input:
394
415
  filter {"kind":"filter","input":<query>,"predicate":<predicate>}
395
416
  text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
396
417
  traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
397
- vector, set, sort, limit, page, project, and expand are also supported.
418
+ vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
419
+ set, sort, limit, page, project, and expand are also supported.
398
420
 
399
421
  Predicates use op, not kind:
400
422
  and/or, not, {"op":"eq","propertyId":"status","value":"open"}, neq, lt, lte, gt, gte,
@@ -404,7 +426,10 @@ Traversal and expansion directions are outgoing or incoming. For incoming relati
404
426
  is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
405
427
 
406
428
  Run \`sixb ontology get <type>\` first; never guess property or link ids. Use refs for exact
407
- identities. Put limits and pages inside the query tree.`;
429
+ identities. Put limits and pages inside the query tree.
430
+
431
+ Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
432
+ optionally under filters; k bounds the ranked matches and results carry a score.`;
408
433
  var GROUP_HELP = {
409
434
  doctor: "Usage: sixb doctor",
410
435
  context: "Usage: sixb context",
@@ -471,7 +496,8 @@ var QUERY_EXAMPLES = {
471
496
  incoming: '{"kind":"traverse","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment"}',
472
497
  expand: `{"kind":"expand","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"expansions":[{"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment","limit":${CLI_LIMITS.list.default}}]}`,
473
498
  sort: `{"kind":"limit","input":{"kind":"sort","input":{"kind":"start","objectTypeId":"Customer"},"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]},"limit":${CLI_LIMITS.list.default}}`,
474
- page: `{"kind":"page","input":{"kind":"start","objectTypeId":"Customer"},"pageSize":${CLI_LIMITS.list.default}}`
499
+ page: `{"kind":"page","input":{"kind":"start","objectTypeId":"Customer"},"pageSize":${CLI_LIMITS.list.default}}`,
500
+ vector: `{"kind":"vector","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Product"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"vector":"waterproof trail shoes","profile":"content","k":${CLI_LIMITS.search.default}}`
475
501
  };
476
502
  var FACETS_EXAMPLE = '{"query":{"kind":"start","objectTypeId":"WorkOrder"},"facets":[{"propertyId":"status","limit":10}]}';
477
503
 
@@ -526,6 +552,9 @@ function asRecord2(value) {
526
552
  function asRecords(value) {
527
553
  return Array.isArray(value) ? value.map(asRecord2) : [];
528
554
  }
555
+ function vectorProfileNames(objectType) {
556
+ return Object.keys(asRecord2(asRecord2(objectType.search).vectors));
557
+ }
529
558
  function isFileError(error, code) {
530
559
  return error instanceof Error && "code" in error && error.code === code;
531
560
  }
@@ -1012,12 +1041,48 @@ async function objectsGet(api, args) {
1012
1041
  }));
1013
1042
  }
1014
1043
  async function objectsSearch(api, args) {
1015
- if (requestsHelp(args)) {
1016
- return writeText(`Usage: sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]`);
1044
+ if (requestsHelp(args))
1045
+ return writeText(SEARCH_HELP);
1046
+ const { positionals, options } = parseCommandArgs(args, { "--limit": "string", "--type": "string", "--vector-profile": "string" }, "objects search", 1);
1047
+ const text = positionals[0] ?? "";
1048
+ const limit = integerInRange("--limit", options["--limit"] ?? String(CLI_LIMITS.search.default), 1, CLI_LIMITS.search.maximum);
1049
+ const objectTypeId = options["--type"];
1050
+ if (!objectTypeId) {
1051
+ if (options["--vector-profile"])
1052
+ fail("--vector-profile requires --type.");
1053
+ return writeJson(await api.get("/api/objects/search", { q: text, limit: String(limit) }));
1054
+ }
1055
+ if (!text.trim() || text.length > CLI_LIMITS.vectorSearchText.maximum) {
1056
+ fail(`Semantic search text must be nonempty and at most ${CLI_LIMITS.vectorSearchText.maximum} characters.`);
1017
1057
  }
1018
- const { positionals, options } = parseCommandArgs(args, { "--limit": "string" }, "objects search", 1);
1019
- const limit = String(integerInRange("--limit", options["--limit"] ?? String(CLI_LIMITS.search.default), 1, CLI_LIMITS.search.maximum));
1020
- writeJson(await api.get("/api/objects/search", { q: positionals[0], limit }));
1058
+ const objectType = asRecord2(await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`));
1059
+ const profile = selectVectorProfile(objectTypeId, objectType, options["--vector-profile"]);
1060
+ writeJson(await api.post("/api/objects/query", {
1061
+ query: {
1062
+ kind: "vector",
1063
+ input: { kind: "start", objectTypeId },
1064
+ vector: text,
1065
+ profile,
1066
+ k: limit
1067
+ },
1068
+ includeTotal: false
1069
+ }));
1070
+ }
1071
+ function selectVectorProfile(objectTypeId, objectType, requested) {
1072
+ const profiles = vectorProfileNames(objectType);
1073
+ if (profiles.length === 0) {
1074
+ fail(`${objectTypeId} has no vector search profile.`, "invalid_arguments", "Omit --type for identifier and full-text search.");
1075
+ }
1076
+ if (requested !== undefined) {
1077
+ if (!profiles.includes(requested)) {
1078
+ fail(`${objectTypeId} has no vector profile '${requested}'. Use ${profiles.join(", ")}.`);
1079
+ }
1080
+ return requested;
1081
+ }
1082
+ if (profiles.length > 1) {
1083
+ fail(`${objectTypeId} has vector profiles ${profiles.join(", ")}. Pass --vector-profile <name>.`);
1084
+ }
1085
+ return profiles[0] ?? "";
1021
1086
  }
1022
1087
  async function objectsQuery(api, args) {
1023
1088
  if (requestsHelp(args))
@@ -1129,11 +1194,13 @@ async function ontology(api, args) {
1129
1194
  return writeJson(value.map((entry) => {
1130
1195
  const type = asRecord2(entry);
1131
1196
  const properties = asRecords(type.properties);
1197
+ const vectorProfiles = vectorProfileNames(type);
1132
1198
  return {
1133
1199
  id: type.id,
1134
1200
  name: type.name,
1135
1201
  description: type.description,
1136
1202
  primaryPropertyId: properties.find((property) => property.primary === true)?.id,
1203
+ ...vectorProfiles.length === 0 ? {} : { vectorProfiles },
1137
1204
  links: asRecords(type.links).map(({ id, name, description, targetObjectTypeId, cardinality }) => ({
1138
1205
  id,
1139
1206
  name,
@@ -1377,24 +1444,24 @@ function createInstanceApiClient(mode) {
1377
1444
  });
1378
1445
  }
1379
1446
  export {
1380
- writeText,
1381
- writeJson,
1382
- runInstanceCli,
1383
- requestsHelp,
1384
- reportError,
1385
- renderInstanceHelp,
1386
- isInstanceCommand,
1387
- isHelp,
1388
- isFileError,
1389
- fail,
1390
- createInstanceApiClient,
1391
- asRecord2 as asRecord,
1392
- INSTANCE_COMMANDS,
1393
- INSTANCE_CLI_VERSION,
1394
- EXIT_USAGE,
1395
- EXIT_API,
1447
+ ApiClient,
1396
1448
  CliError,
1397
- ApiClient
1449
+ EXIT_API,
1450
+ EXIT_USAGE,
1451
+ INSTANCE_CLI_VERSION,
1452
+ INSTANCE_COMMANDS,
1453
+ asRecord2 as asRecord,
1454
+ createInstanceApiClient,
1455
+ fail,
1456
+ isFileError,
1457
+ isHelp,
1458
+ isInstanceCommand,
1459
+ renderInstanceHelp,
1460
+ reportError,
1461
+ requestsHelp,
1462
+ runInstanceCli,
1463
+ writeJson,
1464
+ writeText
1398
1465
  };
1399
1466
 
1400
- //# debugId=89FD14967D5A33DF64756E2164756E21
1467
+ //# debugId=5986EDD7566E527B64756E2164756E21
package/dist/index.js.map CHANGED
@@ -5,14 +5,14 @@
5
5
  "import { randomUUID } from \"node:crypto\"\nimport { createWriteStream } from \"node:fs\"\nimport { readFile, rename, rm } from \"node:fs/promises\"\nimport { basename, dirname, join } from \"node:path\"\nimport { Readable } from \"node:stream\"\nimport { pipeline } from \"node:stream/promises\"\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\"\nimport { CliError, EXIT_API, fail } from \"./output\"\n\nexport class ApiClient {\n readonly baseUrl: string\n private readonly authorization: string | undefined\n private readonly missingBaseUrlMessage: string\n private readonly unavailableMessage: string\n private readonly unavailableHint: string\n\n constructor(options: ApiClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\")\n this.authorization = options.authorization\n this.missingBaseUrlMessage = options.missingBaseUrlMessage\n this.unavailableMessage = options.unavailableMessage\n this.unavailableHint = options.unavailableHint\n }\n\n async get(path: string, query?: Readonly<Record<string, string | undefined>>): Promise<unknown> {\n const url = this.url(path, query)\n return this.json(url, { method: \"GET\" })\n }\n\n async post(path: string, body: unknown): Promise<unknown> {\n return this.json(this.url(path), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n })\n }\n\n async upload(path: string, source: string, logicalPath?: string): Promise<unknown> {\n const form = new FormData()\n form.append(\"file\", new Blob([new Uint8Array(await readFile(source))]), basename(source))\n if (logicalPath) form.append(\"logicalPath\", logicalPath)\n return this.json(this.url(path), { method: \"POST\", body: form })\n }\n\n async download(\n path: string,\n output: string,\n query?: Readonly<Record<string, string | undefined>>\n ): Promise<void> {\n const response = await this.fetch(this.url(path, query), { method: \"GET\" })\n const temporary = join(dirname(output), `.${basename(output)}.sixb-${randomUUID()}.tmp`)\n try {\n const body = response.body\n ? Readable.fromWeb(response.body as unknown as NodeReadableStream)\n : Readable.from([])\n await pipeline(body, createWriteStream(temporary, { flags: \"wx\" }))\n await rename(temporary, output)\n } catch (error) {\n await rm(temporary, { force: true }).catch(() => {})\n throw error\n }\n }\n\n private url(path: string, query?: Readonly<Record<string, string | undefined>>): URL {\n if (!this.baseUrl) fail(this.missingBaseUrlMessage, \"runtime_unavailable\")\n validateApiPath(path)\n const url = new URL(`${this.baseUrl}${path}`)\n for (const [key, value] of Object.entries(query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, value)\n }\n return url\n }\n\n private async json(url: URL, init: RequestInit): Promise<unknown> {\n const response = await this.fetch(url, init)\n const text = await response.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n throw new CliError(\n { code: \"invalid_api_response\", message: \"The Sixb API returned invalid JSON.\" },\n EXIT_API\n )\n }\n }\n\n private async fetch(url: URL, init: RequestInit): Promise<Response> {\n let response: Response\n try {\n const headers = new Headers(init.headers)\n if (this.authorization) headers.set(\"authorization\", this.authorization)\n response = await fetch(url, { ...init, headers })\n } catch {\n throw new CliError(\n {\n code: \"api_unreachable\",\n message: this.unavailableMessage,\n hint: this.unavailableHint,\n },\n EXIT_API\n )\n }\n if (response.ok) return response\n\n const body = await response.text()\n let parsed: unknown\n try {\n parsed = JSON.parse(body)\n } catch {\n parsed = undefined\n }\n const record = asRecord(parsed)\n const error = record.error\n const nested = asRecord(error)\n const code = stringField(record, \"code\") ?? stringField(nested, \"code\") ?? \"http_error\"\n const message =\n stringField(record, \"message\") ??\n stringField(nested, \"message\") ??\n (typeof error === \"string\"\n ? error\n : `The Sixb API request failed with HTTP ${response.status}.`)\n const hint = stringField(record, \"hint\") ?? stringField(nested, \"hint\")\n const issues = Array.isArray(record.issues)\n ? record.issues\n : Array.isArray(nested.issues)\n ? nested.issues\n : undefined\n throw new CliError(\n {\n code,\n status: response.status,\n message,\n ...(hint ? { hint } : {}),\n ...(issues ? { issues } : {}),\n },\n EXIT_API\n )\n }\n}\n\nexport interface ApiClientOptions {\n readonly baseUrl: string\n readonly authorization?: string\n readonly missingBaseUrlMessage: string\n readonly unavailableMessage: string\n readonly unavailableHint: string\n}\n\nfunction validateApiPath(path: string): void {\n const invalid = (): never => fail(\"API paths must be relative and start with /api/.\")\n if (path.includes(\"\\\\\") || path.includes(\"#\")) invalid()\n const normalized = (() => {\n try {\n return new URL(path, \"http://sixb.invalid\")\n } catch {\n return invalid()\n }\n })()\n if (\n normalized.origin !== \"http://sixb.invalid\" ||\n (normalized.pathname !== \"/api\" && !normalized.pathname.startsWith(\"/api/\"))\n ) {\n invalid()\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction stringField(record: Readonly<Record<string, unknown>>, key: string): string | undefined {\n const value = record[key]\n return typeof value === \"string\" ? value : undefined\n}\n",
6
6
  "/** Version of the stable JSON and command contract. */\nexport const INSTANCE_CLI_VERSION = \"1\"\nexport const EXIT_USAGE = 2\nexport const EXIT_API = 3\n\nexport interface CliErrorBody {\n readonly code: string\n readonly status?: number\n readonly message: string\n readonly hint?: string\n readonly issues?: readonly unknown[]\n}\n\nexport class CliError extends Error {\n readonly body: CliErrorBody\n readonly exitCode: number\n\n constructor(body: CliErrorBody, exitCode = EXIT_USAGE) {\n super(body.message)\n this.name = \"CliError\"\n this.body = body\n this.exitCode = exitCode\n }\n}\n\nexport function fail(message: string, code = \"invalid_arguments\", hint?: string): never {\n throw new CliError({ code, message, ...(hint ? { hint } : {}) })\n}\n\nexport function writeJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value)}\\n`)\n}\n\nexport function writeText(value: string): void {\n process.stdout.write(value.endsWith(\"\\n\") ? value : `${value}\\n`)\n}\n\nexport function reportError(error: unknown): number {\n const cliError =\n error instanceof CliError\n ? error\n : new CliError(\n {\n code: \"internal_error\",\n message: error instanceof Error ? error.message : \"The Sixb CLI failed unexpectedly.\",\n },\n EXIT_API\n )\n process.stderr.write(`${JSON.stringify({ error: cliError.body })}\\n`)\n return cliError.exitCode\n}\n",
7
7
  "import { fail } from \"./output\"\n\ntype OptionKinds = Readonly<Record<string, \"string\" | \"boolean\">>\n\n/** Parse a command's options once, before reading files or calling the API. */\nexport function parseCommandArgs<const T extends OptionKinds>(\n args: readonly string[],\n kinds: T,\n command: string,\n positionalCount: number | readonly [number, number] = 0\n): {\n positionals: string[]\n options: { [K in keyof T]?: T[K] extends \"boolean\" ? boolean : string }\n} {\n const positionals: string[] = []\n const options: Record<string, string | boolean> = {}\n let positionalOnly = false\n for (let index = 0; index < args.length; index++) {\n const argument = args[index] ?? \"\"\n if (!positionalOnly && argument === \"--\") {\n positionalOnly = true\n continue\n }\n if (positionalOnly || !argument.startsWith(\"-\") || argument === \"-\") {\n positionals.push(argument)\n continue\n }\n const equals = argument.indexOf(\"=\")\n const flag = equals < 0 ? argument : argument.slice(0, equals)\n if (!Object.hasOwn(kinds, flag)) fail(`Unknown ${command} option '${flag}'.`)\n if (Object.hasOwn(options, flag)) fail(`${flag} may only be provided once.`)\n if (kinds[flag] === \"boolean\") {\n if (equals >= 0) fail(`${flag} does not accept a value.`)\n options[flag] = true\n } else {\n const value = equals < 0 ? args[++index] : argument.slice(equals + 1)\n if (!value || (equals < 0 && value.startsWith(\"--\"))) {\n fail(`${flag} requires a value.`)\n }\n options[flag] = value\n }\n }\n const [minimum, maximum] =\n typeof positionalCount === \"number\" ? [positionalCount, positionalCount] : positionalCount\n if (positionals.length < minimum || positionals.length > maximum) {\n fail(`Invalid arguments for '${command}'.`)\n }\n return {\n positionals,\n // Every assigned option was checked against its declared kind above.\n options: options as { [K in keyof T]?: T[K] extends \"boolean\" ? boolean : string },\n }\n}\n\nexport function requestsHelp(args: readonly string[]): boolean {\n const separator = args.indexOf(\"--\")\n const beforeSeparator = separator < 0 ? args : args.slice(0, separator)\n return isHelp(args[0]) || beforeSeparator.includes(\"--help\") || beforeSeparator.includes(\"-h\")\n}\n\n/** Argument validation shared by every instance command mode. */\n\nconst RFC3339_TIMESTAMP = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/\n\nexport function isHelp(value: string | undefined): boolean {\n return value === \"-h\" || value === \"--help\" || value === \"help\"\n}\n\nexport function requireExact(args: readonly string[], count: number, message: string): void {\n if (args.length !== count) fail(message)\n}\n\nexport function integerInRange(\n flag: string,\n value: string,\n minimum: number,\n maximum: number\n): number {\n if (!/^[0-9]+$/.test(value)) {\n fail(`${flag} must be an integer from ${minimum} through ${maximum}.`)\n }\n const parsed = Number(value)\n if (!Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) {\n fail(`${flag} must be an integer from ${minimum} through ${maximum}.`)\n }\n return parsed\n}\n\nexport function nonNegativeInteger(flag: string, value: string): number {\n if (!/^[0-9]+$/.test(value)) {\n fail(`${flag} must be a non-negative integer.`)\n }\n const parsed = Number(value)\n if (!Number.isSafeInteger(parsed)) {\n fail(`${flag} must be a non-negative safe integer.`)\n }\n return parsed\n}\n\nexport function rfc3339Value(flag: string, value: string): string {\n if (!RFC3339_TIMESTAMP.test(value) || Number.isNaN(Date.parse(value))) {\n fail(`${flag} must be an RFC 3339 timestamp.`)\n }\n return value\n}\n\nexport function requireOrderedRange(\n afterFlag: string,\n after: string | undefined,\n beforeFlag: string,\n before: string | undefined\n): void {\n if (after && before && Date.parse(after) > Date.parse(before)) {\n fail(`${afterFlag} must be before or equal to ${beforeFlag}.`)\n }\n}\n\nexport function enumValue<const T extends readonly string[]>(\n flag: string,\n value: string,\n allowed: T\n): T[number] {\n if (!allowed.includes(value)) fail(`${flag} must be ${formatAlternatives(allowed)}.`)\n return value as T[number]\n}\n\nfunction formatAlternatives(values: readonly string[]): string {\n if (values.length < 2) return values[0] ?? \"a supported value\"\n return `${values.slice(0, -1).join(\", \")}, or ${values.at(-1)}`\n}\n",
8
- "/** Stable safety and output bounds shared by local and sandbox modes. */\nexport const CLI_LIMITS = {\n list: { default: 20, maximum: 1_000 },\n search: { default: 20, maximum: 50 },\n telemetryHistory: { default: 100, maximum: 1_000 },\n linkPage: { default: 100, maximum: 1_000 },\n inspect: {\n depth: { default: 2, maximum: 3 },\n objects: { default: 20, maximum: 100 },\n links: { default: 50, maximum: 500 },\n maximumPages: 10,\n },\n} as const\n\nexport const DEFAULT_LIST_ORDER = \"desc\" as const\nexport const DEFAULT_OBJECT_ORDER_BY = \"updatedAt\" as const\nexport const DEFAULT_TELEMETRY_ORDER = \"desc\" as const\n",
9
- "import {\n CLI_LIMITS,\n DEFAULT_LIST_ORDER,\n DEFAULT_OBJECT_ORDER_BY,\n DEFAULT_TELEMETRY_ORDER,\n} from \"../policies\"\n\nconst SANDBOX_MAIN_HELP = `Sixb agent CLI\n\nUsage:\n sixb <command> [options]\n\nThe CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\nAPI commands emit JSON. Help, version, and examples emit text. Downloads write to --output and\nemit a JSON receipt.\n\nDiscovery:\n sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n sixb project show Show project metadata\n sixb ontology list Compact visible type and relationship catalog\n sixb ontology get <type> Inspect one object type, properties, links, and actions\n\nObjects:\n sixb objects inspect <type> <id> Inspect an object and its related graph in one command\n sixb objects list [options] Browse materialized objects\n sixb objects get <type> <id>... Exact lookup through opaque object references\n sixb objects search <text> Search visible objects\n sixb objects query --file <file|-> Execute query IR from JSON\n sixb objects count --file <file|-> Count a query without returning rows\n sixb objects exists --file <file|-> Test whether a query has a match\n sixb objects facets --file <file|-> Run a {query, facets} request\n sixb objects links <type> <id> Read exact persisted links\n\nTelemetry:\n sixb telemetry latest <type> <id> <property>\n sixb telemetry history <type> <id> <property> [options]\n sixb telemetry query --file <file|->\n\nActions and workflows:\n sixb actions list|get|request ...\n sixb action-runs list|get ...\n sixb workflows list|get|start ...\n sixb workflow-runs list|get ...\n\nFiles:\n sixb files upload|download ...\n\nRun \\`sixb <group> --help\\` or \\`sixb <group> <command> --help\\` for exact arguments.\nFor query IR, run \\`sixb objects query --help\\` and \\`sixb objects query --example list\\`.`\n\nconst LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace(\"Sixb agent CLI\", \"Sixb instance CLI\")\n .replace(\n \"The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\",\n \"The CLI uses the selected local profile and its API credentials.\"\n )\n .replace(\n \" sixb doctor Check the sandbox and API gateway\\n sixb context Print the current run context\\n\",\n \"\"\n )\n\nexport function renderInstanceHelp(mode: \"local\" | \"sandbox\"): string {\n return mode === \"sandbox\" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP\n}\n\nexport const OBJECTS_HELP = `Usage:\n sixb objects inspect <object-type> <primary-id> [options]\n sixb objects list [options]\n sixb objects get <object-type> <primary-id>...\n sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects count --file <path|->\n sixb objects exists --file <path|->\n sixb objects facets --file <path|->\n sixb objects facets --example\n sixb objects links <object-type> <primary-id> [options]\n\nList options:\n --type <id> Exact ontology object type id\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order-by createdAt|updatedAt|primaryId Defaults to ${DEFAULT_OBJECT_ORDER_BY}\n --order asc|desc Defaults to ${DEFAULT_LIST_ORDER}\n --id-prefix <value> Primary-id prefix\n --id-suffix <value> Primary-id suffix\n --created-after|--created-before <RFC3339>\n --updated-after|--updated-before <RFC3339>\n\nLinks options:\n --link <link-id>\n --direction outgoing|incoming|both Defaults to both\n --page-size <1-${CLI_LIMITS.linkPage.maximum}> Defaults to ${CLI_LIMITS.linkPage.default}\n --page-token <token> Continue an edge page\n --include-objects Include selected and current-page endpoint objects\n\nInspect options:\n --depth <0-${CLI_LIMITS.inspect.depth.maximum}> Defaults to ${CLI_LIMITS.inspect.depth.default}; use 0 for only the object\n --max-objects <1-${CLI_LIMITS.inspect.objects.maximum}> Defaults to ${CLI_LIMITS.inspect.objects.default}\n --max-links <1-${CLI_LIMITS.inspect.links.maximum}> Defaults to ${CLI_LIMITS.inspect.links.default}\n --full Include timestamps and encountered type definitions\n\nUse \\`objects get\\` first when context provides an exact object reference. Use \\`objects inspect\\`\nonly when related objects are needed; it follows both relationship directions to depth 2 by\ndefault and returns a bounded graph.\nInspect omits materialization timestamps and ontology definitions by default. Use \\`--full\\` when\nstorage timestamps, declared links, or available actions are needed.\n\nSearch returns at most ${CLI_LIMITS.search.maximum} matches and defaults to ${CLI_LIMITS.search.default}.\n\n\\`objects get\\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or\n% are safe. Identifiers are case-sensitive.`\n\nexport const QUERY_HELP = `Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <exact|filter|incoming|expand|sort|page>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n vector, set, sort, limit, page, project, and expand are also supported.\n\nPredicates use op, not kind:\n and/or, not, {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"}, neq, lt, lte, gt, gte,\n in, exists, and contains.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nRun \\`sixb ontology get <type>\\` first; never guess property or link ids. Use refs for exact\nidentities. Put limits and pages inside the query tree.`\n\nexport const GROUP_HELP = {\n doctor: \"Usage: sixb doctor\",\n context: \"Usage: sixb context\",\n project: \"Usage: sixb project show\",\n ontology: `Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>`,\n telemetry: `Usage:\n sixb telemetry latest <object-type> <primary-id> <property-id>\n sixb telemetry history <object-type> <primary-id> <property-id> [options]\n sixb telemetry query --file <path|->\n\nHistory options:\n --from <RFC3339>\n --to <RFC3339>\n --limit <1-${CLI_LIMITS.telemetryHistory.maximum}> Defaults to ${CLI_LIMITS.telemetryHistory.default}\n --order <asc|desc> Timestamp order; defaults to ${DEFAULT_TELEMETRY_ORDER}`,\n actions: `Usage:\n sixb actions list [--type <object-type>]\n sixb actions get <action-id>\n sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]\n\n\\`actions get\\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file\ncontains that parameter object; use - to read standard input. --wait returns the terminal Action\nrun and waits at most 25 seconds.`,\n \"action-runs\": `Usage:\n sixb action-runs list [options]\n sixb action-runs get <run-id>\n\nList options:\n --action <action-id>\n --type <object-type>\n --id <primary-id>\n --status queued|running|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n files: `Usage:\n sixb files upload <local-path> [--logical-path <path>]\n sixb files download object <type> <id> --path <json-pointer> --output <local-path>\n sixb files download action-run|workflow-run <run-id> --path <json-pointer> --output <local-path>`,\n workflows: `Usage:\n sixb workflows list\n sixb workflows get <workflow-id>\n sixb workflows start <workflow-id> [--file <path|->]\n\nThe JSON file contains the workflow input object. Use - to read standard input.`,\n \"workflow-runs\": `Usage:\n sixb workflow-runs list [options]\n sixb workflow-runs get <run-id>\n\nList options:\n --workflow <workflow-id>\n --status queued|running|waiting|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n} as const\n\nexport const QUERY_EXAMPLES: Readonly<Record<string, string>> = {\n exact:\n '{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]}',\n filter: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"limit\":${CLI_LIMITS.list.default}}`,\n incoming:\n '{\"kind\":\"traverse\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\"}',\n expand: `{\"kind\":\"expand\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"expansions\":[{\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\",\"limit\":${CLI_LIMITS.list.default}}]}`,\n sort: `{\"kind\":\"limit\",\"input\":{\"kind\":\"sort\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]},\"limit\":${CLI_LIMITS.list.default}}`,\n page: `{\"kind\":\"page\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"pageSize\":${CLI_LIMITS.list.default}}`,\n}\n\nexport const FACETS_EXAMPLE =\n '{\"query\":{\"kind\":\"start\",\"objectTypeId\":\"WorkOrder\"},\"facets\":[{\"propertyId\":\"status\",\"limit\":10}]}'\n",
10
- "import { readFile } from \"node:fs/promises\"\nimport { enumValue, integerInRange, nonNegativeInteger, parseCommandArgs } from \"../arguments\"\nimport { fail } from \"../output\"\n\nexport type QueryOptions = Record<string, string | undefined>\n\n/** Parse flag/value pairs into API query parameters. */\n\nexport function parseQueryOptions(\n args: readonly string[],\n names: Readonly<Record<string, string>>,\n command: string\n): QueryOptions {\n const kinds = Object.fromEntries(Object.keys(names).map((flag) => [flag, \"string\" as const]))\n const { options } = parseCommandArgs(args, kinds, command)\n const query: QueryOptions = {}\n for (const [flag, value] of Object.entries(options)) {\n const name = names[flag]\n if (name) query[name] = value\n }\n return query\n}\n\nexport function normalizeWindowOptions(\n options: QueryOptions,\n policy: {\n readonly defaultLimit: number\n readonly maximumLimit: number\n readonly defaultOrder: \"asc\" | \"desc\"\n readonly offset?: boolean\n }\n): QueryOptions {\n const normalized: QueryOptions = {\n ...options,\n limit: String(\n integerInRange(\n \"--limit\",\n options.limit ?? String(policy.defaultLimit),\n 1,\n policy.maximumLimit\n )\n ),\n order: enumValue(\"--order\", options.order ?? policy.defaultOrder, [\"asc\", \"desc\"]),\n }\n if (policy.offset && options.offset !== undefined) {\n normalized.offset = String(nonNegativeInteger(\"--offset\", options.offset))\n }\n return normalized\n}\n\nexport function singleFileOption(args: readonly string[], command: string): string {\n const { options } = parseCommandArgs(args, { \"--file\": \"string\" }, command)\n if (!options[\"--file\"]) fail(`${command} requires --file <path|->.`)\n return options[\"--file\"]\n}\n\nexport async function readJson(source: string): Promise<unknown> {\n let text: string\n try {\n text = source === \"-\" ? await readStdin() : await readFile(source, \"utf8\")\n } catch (error) {\n if (isFileError(error, \"ENOENT\")) fail(`JSON file '${source}' does not exist.`)\n throw error\n }\n try {\n return JSON.parse(text)\n } catch {\n fail(\n source === \"-\"\n ? \"Standard input is not valid JSON.\"\n : `JSON file '${source}' is not valid JSON.`,\n \"invalid_json\"\n )\n }\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nexport function asRecords(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.map(asRecord) : []\n}\n\nexport function isFileError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === code\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Uint8Array[] = []\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? new TextEncoder().encode(chunk) : chunk)\n }\n return new TextDecoder().decode(Buffer.concat(chunks))\n}\n",
8
+ "/** Stable safety and output bounds shared by local and sandbox modes. */\nexport const CLI_LIMITS = {\n list: { default: 20, maximum: 1_000 },\n search: { default: 20, maximum: 50 },\n /** Mirrors the server's vector query text bound so oversized text fails before any request. */\n vectorSearchText: { maximum: 8_000 },\n telemetryHistory: { default: 100, maximum: 1_000 },\n linkPage: { default: 100, maximum: 1_000 },\n inspect: {\n depth: { default: 2, maximum: 3 },\n objects: { default: 20, maximum: 100 },\n links: { default: 50, maximum: 500 },\n maximumPages: 10,\n },\n} as const\n\nexport const DEFAULT_LIST_ORDER = \"desc\" as const\nexport const DEFAULT_OBJECT_ORDER_BY = \"updatedAt\" as const\nexport const DEFAULT_TELEMETRY_ORDER = \"desc\" as const\n",
9
+ "import {\n CLI_LIMITS,\n DEFAULT_LIST_ORDER,\n DEFAULT_OBJECT_ORDER_BY,\n DEFAULT_TELEMETRY_ORDER,\n} from \"../policies\"\n\nconst SANDBOX_MAIN_HELP = `Sixb agent CLI\n\nUsage:\n sixb <command> [options]\n\nThe CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\nAPI commands emit JSON. Help, version, and examples emit text. Downloads write to --output and\nemit a JSON receipt.\n\nDiscovery:\n sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n sixb project show Show project metadata\n sixb ontology list Compact visible type and relationship catalog\n sixb ontology get <type> Inspect one object type, properties, links, and actions\n\nObjects:\n sixb objects inspect <type> <id> Inspect an object and its related graph in one command\n sixb objects list [options] Browse materialized objects\n sixb objects get <type> <id>... Exact lookup through opaque object references\n sixb objects search <text> Search visible objects by id prefix and full text\n sixb objects search <text> --type <type>\n Semantic search through the type's vector profile\n sixb objects query --file <file|-> Execute query IR from JSON\n sixb objects count --file <file|-> Count a query without returning rows\n sixb objects exists --file <file|-> Test whether a query has a match\n sixb objects facets --file <file|-> Run a {query, facets} request\n sixb objects links <type> <id> Read exact persisted links\n\nTelemetry:\n sixb telemetry latest <type> <id> <property>\n sixb telemetry history <type> <id> <property> [options]\n sixb telemetry query --file <file|->\n\nActions and workflows:\n sixb actions list|get|request ...\n sixb action-runs list|get ...\n sixb workflows list|get|start ...\n sixb workflow-runs list|get ...\n\nFiles:\n sixb files upload|download ...\n\nRun \\`sixb <group> --help\\` or \\`sixb <group> <command> --help\\` for exact arguments.\nFor query IR, run \\`sixb objects query --help\\` and \\`sixb objects query --example list\\`.`\n\nconst LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace(\"Sixb agent CLI\", \"Sixb instance CLI\")\n .replace(\n \"The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\",\n \"The CLI uses the selected local profile and its API credentials.\"\n )\n .replace(\n \" sixb doctor Check the sandbox and API gateway\\n sixb context Print the current run context\\n\",\n \"\"\n )\n\nexport function renderInstanceHelp(mode: \"local\" | \"sandbox\"): string {\n return mode === \"sandbox\" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP\n}\n\nconst SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.\nWith --type, the server embeds the text with the profile's model and ranks results by score,\na cosine similarity where higher is closer. \\`sixb ontology list\\` shows each type's\nvectorProfiles. To combine semantic search with filters, run\n\\`sixb objects query --example vector\\`.`\n\nexport const SEARCH_HELP = `Usage:\n sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]\n sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]\n\n--limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several\nprofiles.\n\n${SEARCH_DETAILS}`\n\nexport const OBJECTS_HELP = `Usage:\n sixb objects inspect <object-type> <primary-id> [options]\n sixb objects list [options]\n sixb objects get <object-type> <primary-id>...\n sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects count --file <path|->\n sixb objects exists --file <path|->\n sixb objects facets --file <path|->\n sixb objects facets --example\n sixb objects links <object-type> <primary-id> [options]\n\nList options:\n --type <id> Exact ontology object type id\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order-by createdAt|updatedAt|primaryId Defaults to ${DEFAULT_OBJECT_ORDER_BY}\n --order asc|desc Defaults to ${DEFAULT_LIST_ORDER}\n --id-prefix <value> Primary-id prefix\n --id-suffix <value> Primary-id suffix\n --created-after|--created-before <RFC3339>\n --updated-after|--updated-before <RFC3339>\n\nSearch options:\n --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}\n --type <id> Semantic search through this type's vector profile\n --vector-profile <name> Required when the type declares several profiles\n\nLinks options:\n --link <link-id>\n --direction outgoing|incoming|both Defaults to both\n --page-size <1-${CLI_LIMITS.linkPage.maximum}> Defaults to ${CLI_LIMITS.linkPage.default}\n --page-token <token> Continue an edge page\n --include-objects Include selected and current-page endpoint objects\n\nInspect options:\n --depth <0-${CLI_LIMITS.inspect.depth.maximum}> Defaults to ${CLI_LIMITS.inspect.depth.default}; use 0 for only the object\n --max-objects <1-${CLI_LIMITS.inspect.objects.maximum}> Defaults to ${CLI_LIMITS.inspect.objects.default}\n --max-links <1-${CLI_LIMITS.inspect.links.maximum}> Defaults to ${CLI_LIMITS.inspect.links.default}\n --full Include timestamps and encountered type definitions\n\nUse \\`objects get\\` first when context provides an exact object reference. Use \\`objects inspect\\`\nonly when related objects are needed; it follows both relationship directions to depth 2 by\ndefault and returns a bounded graph.\nInspect omits materialization timestamps and ontology definitions by default. Use \\`--full\\` when\nstorage timestamps, declared links, or available actions are needed.\n\n${SEARCH_DETAILS}\n\n\\`objects get\\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or\n% are safe. Identifiers are case-sensitive.`\n\nexport const QUERY_HELP = `Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <exact|filter|incoming|expand|sort|page|vector>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n set, sort, limit, page, project, and expand are also supported.\n\nPredicates use op, not kind:\n and/or, not, {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"}, neq, lt, lte, gt, gte,\n in, exists, and contains.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nRun \\`sixb ontology get <type>\\` first; never guess property or link ids. Use refs for exact\nidentities. Put limits and pages inside the query tree.\n\nVector profile names are the keys of the type's search.vectors. Vector input is a start node,\noptionally under filters; k bounds the ranked matches and results carry a score.`\n\nexport const GROUP_HELP = {\n doctor: \"Usage: sixb doctor\",\n context: \"Usage: sixb context\",\n project: \"Usage: sixb project show\",\n ontology: `Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>`,\n telemetry: `Usage:\n sixb telemetry latest <object-type> <primary-id> <property-id>\n sixb telemetry history <object-type> <primary-id> <property-id> [options]\n sixb telemetry query --file <path|->\n\nHistory options:\n --from <RFC3339>\n --to <RFC3339>\n --limit <1-${CLI_LIMITS.telemetryHistory.maximum}> Defaults to ${CLI_LIMITS.telemetryHistory.default}\n --order <asc|desc> Timestamp order; defaults to ${DEFAULT_TELEMETRY_ORDER}`,\n actions: `Usage:\n sixb actions list [--type <object-type>]\n sixb actions get <action-id>\n sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]\n\n\\`actions get\\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file\ncontains that parameter object; use - to read standard input. --wait returns the terminal Action\nrun and waits at most 25 seconds.`,\n \"action-runs\": `Usage:\n sixb action-runs list [options]\n sixb action-runs get <run-id>\n\nList options:\n --action <action-id>\n --type <object-type>\n --id <primary-id>\n --status queued|running|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n files: `Usage:\n sixb files upload <local-path> [--logical-path <path>]\n sixb files download object <type> <id> --path <json-pointer> --output <local-path>\n sixb files download action-run|workflow-run <run-id> --path <json-pointer> --output <local-path>`,\n workflows: `Usage:\n sixb workflows list\n sixb workflows get <workflow-id>\n sixb workflows start <workflow-id> [--file <path|->]\n\nThe JSON file contains the workflow input object. Use - to read standard input.`,\n \"workflow-runs\": `Usage:\n sixb workflow-runs list [options]\n sixb workflow-runs get <run-id>\n\nList options:\n --workflow <workflow-id>\n --status queued|running|waiting|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n} as const\n\nexport const QUERY_EXAMPLES: Readonly<Record<string, string>> = {\n exact:\n '{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]}',\n filter: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"limit\":${CLI_LIMITS.list.default}}`,\n incoming:\n '{\"kind\":\"traverse\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\"}',\n expand: `{\"kind\":\"expand\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"expansions\":[{\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\",\"limit\":${CLI_LIMITS.list.default}}]}`,\n sort: `{\"kind\":\"limit\",\"input\":{\"kind\":\"sort\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]},\"limit\":${CLI_LIMITS.list.default}}`,\n page: `{\"kind\":\"page\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"pageSize\":${CLI_LIMITS.list.default}}`,\n vector: `{\"kind\":\"vector\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Product\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"vector\":\"waterproof trail shoes\",\"profile\":\"content\",\"k\":${CLI_LIMITS.search.default}}`,\n}\n\nexport const FACETS_EXAMPLE =\n '{\"query\":{\"kind\":\"start\",\"objectTypeId\":\"WorkOrder\"},\"facets\":[{\"propertyId\":\"status\",\"limit\":10}]}'\n",
10
+ "import { readFile } from \"node:fs/promises\"\nimport { enumValue, integerInRange, nonNegativeInteger, parseCommandArgs } from \"../arguments\"\nimport { fail } from \"../output\"\n\nexport type QueryOptions = Record<string, string | undefined>\n\n/** Parse flag/value pairs into API query parameters. */\n\nexport function parseQueryOptions(\n args: readonly string[],\n names: Readonly<Record<string, string>>,\n command: string\n): QueryOptions {\n const kinds = Object.fromEntries(Object.keys(names).map((flag) => [flag, \"string\" as const]))\n const { options } = parseCommandArgs(args, kinds, command)\n const query: QueryOptions = {}\n for (const [flag, value] of Object.entries(options)) {\n const name = names[flag]\n if (name) query[name] = value\n }\n return query\n}\n\nexport function normalizeWindowOptions(\n options: QueryOptions,\n policy: {\n readonly defaultLimit: number\n readonly maximumLimit: number\n readonly defaultOrder: \"asc\" | \"desc\"\n readonly offset?: boolean\n }\n): QueryOptions {\n const normalized: QueryOptions = {\n ...options,\n limit: String(\n integerInRange(\n \"--limit\",\n options.limit ?? String(policy.defaultLimit),\n 1,\n policy.maximumLimit\n )\n ),\n order: enumValue(\"--order\", options.order ?? policy.defaultOrder, [\"asc\", \"desc\"]),\n }\n if (policy.offset && options.offset !== undefined) {\n normalized.offset = String(nonNegativeInteger(\"--offset\", options.offset))\n }\n return normalized\n}\n\nexport function singleFileOption(args: readonly string[], command: string): string {\n const { options } = parseCommandArgs(args, { \"--file\": \"string\" }, command)\n if (!options[\"--file\"]) fail(`${command} requires --file <path|->.`)\n return options[\"--file\"]\n}\n\nexport async function readJson(source: string): Promise<unknown> {\n let text: string\n try {\n text = source === \"-\" ? await readStdin() : await readFile(source, \"utf8\")\n } catch (error) {\n if (isFileError(error, \"ENOENT\")) fail(`JSON file '${source}' does not exist.`)\n throw error\n }\n try {\n return JSON.parse(text)\n } catch {\n fail(\n source === \"-\"\n ? \"Standard input is not valid JSON.\"\n : `JSON file '${source}' is not valid JSON.`,\n \"invalid_json\"\n )\n }\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nexport function asRecords(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.map(asRecord) : []\n}\n\n/** Names of an object type definition's `search.vectors` profiles, in declaration order. */\nexport function vectorProfileNames(objectType: Record<string, unknown>): string[] {\n return Object.keys(asRecord(asRecord(objectType.search).vectors))\n}\n\nexport function isFileError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === code\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Uint8Array[] = []\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? new TextEncoder().encode(chunk) : chunk)\n }\n return new TextDecoder().decode(Buffer.concat(chunks))\n}\n",
11
11
  "import type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { CliError, EXIT_API, fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { asRecord, parseQueryOptions, readJson } from \"./shared\"\n\nexport async function actions(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.actions)\n if (sub === \"get\") {\n const { positionals } = parseCommandArgs(rest, {}, \"actions get\", 1)\n return writeJson(await api.get(`/api/actions/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n if (sub === \"list\") {\n const options = parseQueryOptions(rest, { \"--type\": \"objectTypeId\" }, \"actions list\")\n const response = await api.get(\"/api/actions\")\n if (!options.objectTypeId) return writeJson(response)\n if (!Array.isArray(response)) fail(\"The actions API returned an invalid response.\")\n return writeJson(\n response.filter((value) => asRecord(value).objectTypeId === options.objectTypeId)\n )\n }\n if (sub === \"request\") {\n const { positionals, options } = parseCommandArgs(\n rest,\n {\n \"--subject-type\": \"string\",\n \"--subject-id\": \"string\",\n \"--file\": \"string\",\n \"--run-id\": \"string\",\n \"--wait\": \"boolean\",\n },\n \"actions request\",\n 1\n )\n const actionId = positionals[0] ?? \"\"\n const subjectType = options[\"--subject-type\"]\n const subjectId = options[\"--subject-id\"]\n const paramsSource = options[\"--file\"]\n const runId = options[\"--run-id\"]\n const wait = options[\"--wait\"]\n if (Boolean(subjectType) !== Boolean(subjectId)) {\n fail(\"--subject-type and --subject-id must be provided together.\")\n }\n const params = paramsSource ? await readJson(paramsSource) : {}\n if (Array.isArray(params) || typeof params !== \"object\" || params === null) {\n fail(\"Action params must be a JSON object.\")\n }\n const requested = await api.post(`/api/actions/${encodeURIComponent(actionId)}`, {\n params,\n ...(subjectType && subjectId\n ? { subject: { kind: \"object\", objectTypeId: subjectType, primaryId: subjectId } }\n : {}),\n ...(runId ? { runId } : {}),\n })\n if (!wait) return writeJson(requested)\n\n const requestedRunId = asRecord(requested).runId\n if (typeof requestedRunId !== \"string\" || requestedRunId.length === 0) {\n throw new CliError(\n {\n code: \"invalid_api_response\",\n message: \"The Action request response did not contain a run id.\",\n },\n EXIT_API\n )\n }\n return writeJson(await waitForActionRun(api, requestedRunId))\n }\n fail(`Unknown actions command '${sub}'.`)\n}\n\nconst ACTION_WAIT_TIMEOUT_MS = 25_000\nconst ACTION_WAIT_POLL_MS = 250\nconst TERMINAL_ACTION_STATUSES = new Set([\"succeeded\", \"failed\", \"cancelled\"])\n\nasync function waitForActionRun(api: ApiClient, runId: string): Promise<unknown> {\n const startedAt = Date.now()\n while (Date.now() - startedAt < ACTION_WAIT_TIMEOUT_MS) {\n const run = await api.get(`/api/action-runs/${encodeURIComponent(runId)}`)\n const status = asRecord(run).status\n if (typeof status === \"string\" && TERMINAL_ACTION_STATUSES.has(status)) return run\n await new Promise((resolve) => setTimeout(resolve, ACTION_WAIT_POLL_MS))\n }\n\n throw new CliError(\n {\n code: \"action_wait_timeout\",\n message: `Action run '${runId}' did not finish within ${ACTION_WAIT_TIMEOUT_MS / 1_000} seconds.`,\n hint: `Inspect it with 'sixb action-runs get ${runId}'.`,\n },\n EXIT_API\n )\n}\n",
12
12
  "import { access } from \"node:fs/promises\"\nimport type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp, requireExact } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\n\nexport async function files(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.files)\n if (sub === \"upload\") {\n const { positionals, options } = parseCommandArgs(\n rest,\n { \"--logical-path\": \"string\" },\n \"files upload\",\n 1\n )\n const source = positionals[0] ?? \"\"\n try {\n await access(source)\n } catch {\n fail(`Upload file '${source}' does not exist.`)\n }\n return writeJson(await api.upload(\"/api/files\", source, options[\"--logical-path\"]))\n }\n if (sub === \"download\") {\n const { positionals, options } = parseCommandArgs(\n rest,\n { \"--path\": \"string\", \"--output\": \"string\" },\n \"files download\",\n [2, 3]\n )\n const context = positionals[0]\n let route: string\n if (context === \"object\") {\n requireExact(positionals, 3, \"files download object requires object type and primary id.\")\n const type = positionals[1] ?? \"\"\n const id = positionals[2] ?? \"\"\n route = `/api/objects/${encodeURIComponent(type)}/${encodeURIComponent(id)}/files/content`\n } else if (context === \"action-run\" || context === \"workflow-run\") {\n requireExact(positionals, 2, `files download ${context} requires exactly one run id.`)\n const id = positionals[1] ?? \"\"\n route = `/api/${context}s/${encodeURIComponent(id)}/files/content`\n } else fail(`Unknown file download context '${context}'.`)\n const path = options[\"--path\"]\n const output = options[\"--output\"]\n if (!path) fail(\"files download requires --path <json-pointer>.\")\n if (!output) fail(\"files download requires --output <local-path>.\")\n await api.download(route, output, { path })\n return writeJson({ downloaded: true, output })\n }\n fail(`Unknown files command '${sub}'.`)\n}\n",
13
13
  "import type { ApiClient } from \"./api-client\"\nimport { CliError, EXIT_API } from \"./output\"\nimport { CLI_LIMITS } from \"./policies\"\n\n/** Build the bounded object graph returned by `objects inspect`. */\n\ninterface ObjectRef {\n readonly objectTypeId: string\n readonly primaryId: string\n}\n\ninterface LocatedRef extends ObjectRef {\n readonly distance: number\n}\n\ninterface MaterializedObject extends ObjectRef {\n readonly createdAt?: unknown\n readonly updatedAt?: unknown\n readonly [key: string]: unknown\n}\n\ninterface PhysicalLink {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n readonly properties?: unknown\n}\n\ninterface LinksResponse {\n readonly objects: MaterializedObject[]\n readonly links: Array<{\n readonly source: ObjectRef\n readonly linkId: string\n readonly target: ObjectRef\n readonly properties?: unknown\n }>\n readonly hasMore: boolean\n readonly nextPageToken?: string\n}\n\ninterface InspectGraphOptions {\n readonly depth: number\n readonly maxObjects: number\n readonly maxLinks: number\n readonly full: boolean\n}\n\nexport async function inspectGraph(\n api: ApiClient,\n objectTypeId: string,\n primaryId: string,\n options: InspectGraphOptions\n): Promise<unknown> {\n if (options.depth === 0) return inspectRoot(api, objectTypeId, primaryId, options)\n\n let refs: LocatedRef[] = [{ objectTypeId, primaryId, distance: 0 }]\n let frontier = refs\n const objects = new Map<string, MaterializedObject>()\n const links = new Map<string, PhysicalLink>()\n let objectsTruncated = false\n let linksTruncated = false\n let pagesTruncated = false\n let pagesRead = 0\n let linksExamined = 0\n\n for (let level = 0; level < options.depth && frontier.length > 0; level += 1) {\n const levelObjects = new Map<string, MaterializedObject>()\n const levelLinks = new Map<string, PhysicalLink>()\n const seenPageTokens = new Set<string>()\n let pageToken: string | undefined\n let continuePaging = true\n\n while (continuePaging) {\n const remainingLinks = options.maxLinks - linksExamined\n if (remainingLinks <= 0) {\n linksTruncated = true\n break\n }\n if (pagesRead >= CLI_LIMITS.inspect.maximumPages) {\n pagesTruncated = true\n break\n }\n const response = asLinksResponse(\n await api.post(\"/api/objects/query/links\", {\n query: {\n kind: \"refs\",\n refs: frontier.map(({ objectTypeId: type, primaryId: id }) => ({\n objectTypeId: type,\n primaryId: id,\n })),\n },\n direction: \"both\",\n includeObjects: true,\n pageSize: Math.min(CLI_LIMITS.linkPage.default, remainingLinks),\n ...(pageToken ? { pageToken } : {}),\n })\n )\n pagesRead += 1\n const pageLinks = response.links.slice(0, remainingLinks)\n linksExamined += pageLinks.length\n linksTruncated ||= response.links.length > pageLinks.length\n const relevantObjects = new Set(frontier.map(refKey))\n for (const link of pageLinks) {\n relevantObjects.add(refKey(link.source))\n relevantObjects.add(refKey(link.target))\n }\n for (const object of response.objects) {\n if (relevantObjects.has(refKey(object))) levelObjects.set(refKey(object), object)\n }\n for (const link of pageLinks) {\n const physical = {\n sourceTypeId: link.source.objectTypeId,\n sourceId: link.source.primaryId,\n linkId: link.linkId,\n targetTypeId: link.target.objectTypeId,\n targetId: link.target.primaryId,\n ...(Object.hasOwn(link, \"properties\") ? { properties: link.properties } : {}),\n }\n levelLinks.set(linkKey(physical), physical)\n }\n if (!response.hasMore) {\n continuePaging = false\n continue\n }\n if (linksExamined >= options.maxLinks) {\n linksTruncated = true\n break\n }\n if (pagesRead >= CLI_LIMITS.inspect.maximumPages) {\n pagesTruncated = true\n break\n }\n if (!response.nextPageToken) {\n invalidApiResponse(\"The object-links API reported another page without a nextPageToken.\")\n }\n if (seenPageTokens.has(response.nextPageToken)) {\n invalidApiResponse(\n \"The object-links API repeated a nextPageToken while inspecting the graph.\"\n )\n }\n seenPageTokens.add(response.nextPageToken)\n pageToken = response.nextPageToken\n }\n\n for (const [key, object] of levelObjects) objects.set(key, object)\n for (const [key, link] of levelLinks) links.set(key, link)\n\n const frontierKeys = new Set(frontier.map(refKey))\n const candidates: LocatedRef[] = []\n for (const link of levelLinks.values()) {\n const source = { objectTypeId: link.sourceTypeId, primaryId: link.sourceId }\n const target = { objectTypeId: link.targetTypeId, primaryId: link.targetId }\n if (frontierKeys.has(refKey(source))) candidates.push({ ...target, distance: level + 1 })\n else if (frontierKeys.has(refKey(target))) candidates.push({ ...source, distance: level + 1 })\n }\n\n const seen = new Set(refs.map(refKey))\n const all = dedupeRefs([...refs, ...candidates])\n objectsTruncated ||= all.length > options.maxObjects\n refs = all.slice(0, options.maxObjects)\n frontier = linksTruncated || pagesTruncated ? [] : refs.filter((ref) => !seen.has(refKey(ref)))\n }\n\n const kept = new Set(refs.map(refKey))\n const filteredLinks = [...links.values()]\n .filter(\n (link) =>\n kept.has(refKey({ objectTypeId: link.sourceTypeId, primaryId: link.sourceId })) &&\n kept.has(refKey({ objectTypeId: link.targetTypeId, primaryId: link.targetId }))\n )\n .sort(compareLinks)\n .map((link) =>\n link.properties == null\n ? {\n sourceTypeId: link.sourceTypeId,\n sourceId: link.sourceId,\n linkId: link.linkId,\n targetTypeId: link.targetTypeId,\n targetId: link.targetId,\n }\n : link\n )\n\n const root = objects.get(refKey({ objectTypeId, primaryId }))\n if (!root) objectNotFound(objectTypeId, primaryId)\n const relatedObjects = refs\n .filter((ref) => ref.distance > 0)\n .flatMap((ref) => {\n const object = objects.get(refKey(ref))\n return object ? [{ ...object, distance: ref.distance }] : []\n })\n\n const objectTypes = options.full\n ? await Promise.all(\n [...new Set(refs.map((ref) => ref.objectTypeId))]\n .sort((left, right) => left.localeCompare(right))\n .map((typeId) => api.get(`/api/object-types/${encodeURIComponent(typeId)}`))\n )\n : undefined\n\n return {\n object: options.full ? root : compactObject(root),\n relatedObjects: options.full ? relatedObjects : relatedObjects.map(compactObject),\n links: filteredLinks,\n graph: {\n depth: options.depth,\n maxObjects: options.maxObjects,\n maxLinks: options.maxLinks,\n maxPages: CLI_LIMITS.inspect.maximumPages,\n objectCount: 1 + relatedObjects.length,\n linkCount: filteredLinks.length,\n pagesRead,\n linksExamined,\n truncated: objectsTruncated || linksTruncated || pagesTruncated,\n truncation: {\n objects: objectsTruncated,\n links: linksTruncated,\n pages: pagesTruncated,\n },\n },\n ...(objectTypes ? { objectTypes } : {}),\n }\n}\n\nasync function inspectRoot(\n api: ApiClient,\n objectTypeId: string,\n primaryId: string,\n options: InspectGraphOptions\n): Promise<unknown> {\n const response = await api.post(\"/api/objects/query\", {\n query: { kind: \"refs\", refs: [{ objectTypeId, primaryId }] },\n includeTotal: false,\n })\n if (typeof response !== \"object\" || response === null || Array.isArray(response)) {\n invalidApiResponse(\"The object query API returned an invalid response.\")\n }\n const rows = (response as Record<string, unknown>).objects\n if (!Array.isArray(rows)) invalidApiResponse(\"The object query API returned an invalid response.\")\n const root = rows.find(\n (value): value is MaterializedObject =>\n isMaterializedObject(value) &&\n value.objectTypeId === objectTypeId &&\n value.primaryId === primaryId\n )\n if (!root) objectNotFound(objectTypeId, primaryId)\n const objectTypes = options.full\n ? [await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`)]\n : undefined\n return {\n object: options.full ? root : compactObject(root),\n relatedObjects: [],\n links: [],\n graph: {\n depth: 0,\n maxObjects: options.maxObjects,\n maxLinks: options.maxLinks,\n maxPages: CLI_LIMITS.inspect.maximumPages,\n objectCount: 1,\n linkCount: 0,\n pagesRead: 0,\n linksExamined: 0,\n truncated: false,\n truncation: { objects: false, links: false, pages: false },\n },\n ...(objectTypes ? { objectTypes } : {}),\n }\n}\n\nfunction asLinksResponse(value: unknown): LinksResponse {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) invalidLinksResponse()\n const record = value as Record<string, unknown>\n if (!Array.isArray(record.objects) || !Array.isArray(record.links)) invalidLinksResponse()\n if (typeof record.hasMore !== \"boolean\") invalidLinksResponse()\n if (record.nextPageToken !== undefined && typeof record.nextPageToken !== \"string\") {\n invalidLinksResponse()\n }\n if (!record.objects.every(isMaterializedObject) || !record.links.every(isPhysicalLinkResponse)) {\n invalidLinksResponse()\n }\n return record as unknown as LinksResponse\n}\n\nfunction invalidLinksResponse(): never {\n invalidApiResponse(\"The object-links API returned an invalid response.\")\n}\n\nfunction invalidApiResponse(message: string): never {\n throw new CliError({ code: \"invalid_api_response\", message }, EXIT_API)\n}\n\nfunction objectNotFound(objectTypeId: string, primaryId: string): never {\n throw new CliError(\n { code: \"not_found\", message: `Object '${objectTypeId}/${primaryId}' was not found.` },\n EXIT_API\n )\n}\n\nfunction isMaterializedObject(value: unknown): value is MaterializedObject {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return typeof record.objectTypeId === \"string\" && typeof record.primaryId === \"string\"\n}\n\nfunction isPhysicalLinkResponse(value: unknown): value is LinksResponse[\"links\"][number] {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return (\n typeof record.linkId === \"string\" && isObjectRef(record.source) && isObjectRef(record.target)\n )\n}\n\nfunction isObjectRef(value: unknown): value is ObjectRef {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return typeof record.objectTypeId === \"string\" && typeof record.primaryId === \"string\"\n}\n\nfunction compactObject<T extends MaterializedObject>(\n object: T\n): Omit<T, \"createdAt\" | \"updatedAt\"> {\n const { createdAt: _createdAt, updatedAt: _updatedAt, ...compact } = object\n return compact\n}\n\nfunction dedupeRefs(values: LocatedRef[]): LocatedRef[] {\n const unique = new Map<string, LocatedRef>()\n for (const value of values) {\n const key = refKey(value)\n const current = unique.get(key)\n if (!current || value.distance < current.distance) unique.set(key, value)\n }\n return [...unique.values()].sort(\n (left, right) =>\n left.distance - right.distance ||\n left.objectTypeId.localeCompare(right.objectTypeId) ||\n left.primaryId.localeCompare(right.primaryId)\n )\n}\n\nfunction refKey(ref: ObjectRef): string {\n return JSON.stringify([ref.objectTypeId, ref.primaryId])\n}\n\nfunction linkKey(link: PhysicalLink): string {\n return JSON.stringify([\n link.sourceTypeId,\n link.sourceId,\n link.linkId,\n link.targetTypeId,\n link.targetId,\n ])\n}\n\nfunction compareLinks(left: PhysicalLink, right: PhysicalLink): number {\n return linkKey(left).localeCompare(linkKey(right))\n}\n",
14
- "import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { inspectGraph } from \"../graph\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_LIST_ORDER, DEFAULT_OBJECT_ORDER_BY } from \"../policies\"\nimport { FACETS_EXAMPLE, OBJECTS_HELP, QUERY_EXAMPLES, QUERY_HELP } from \"./metadata\"\nimport {\n asRecord,\n normalizeWindowOptions,\n parseQueryOptions,\n readJson,\n singleFileOption,\n} from \"./shared\"\n\nexport async function objects(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub)) return writeText(OBJECTS_HELP)\n switch (sub) {\n case \"inspect\":\n return objectsInspect(api, rest)\n case \"list\":\n return objectsList(api, rest)\n case \"get\":\n return objectsGet(api, rest)\n case \"search\":\n return objectsSearch(api, rest)\n case \"query\":\n return objectsQuery(api, rest)\n case \"count\":\n case \"exists\":\n return objectsScalar(api, sub, rest)\n case \"facets\":\n return objectsFacets(api, rest)\n case \"links\":\n return objectsLinks(api, rest)\n default:\n fail(`Unknown objects command '${sub}'.`)\n }\n}\n\nasync function objectsInspect(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--full\": \"boolean\",\n \"--depth\": \"string\",\n \"--max-objects\": \"string\",\n \"--max-links\": \"string\",\n },\n \"objects inspect\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const depth = integerInRange(\n \"--depth\",\n options[\"--depth\"] ?? String(CLI_LIMITS.inspect.depth.default),\n 0,\n CLI_LIMITS.inspect.depth.maximum\n )\n const maxObjects = integerInRange(\n \"--max-objects\",\n options[\"--max-objects\"] ?? String(CLI_LIMITS.inspect.objects.default),\n 1,\n CLI_LIMITS.inspect.objects.maximum\n )\n const maxLinks = integerInRange(\n \"--max-links\",\n options[\"--max-links\"] ?? String(CLI_LIMITS.inspect.links.default),\n 1,\n CLI_LIMITS.inspect.links.maximum\n )\n const full = options[\"--full\"] ?? false\n writeJson(\n await inspectGraph(api, objectTypeId, primaryId, {\n depth,\n maxObjects,\n maxLinks,\n full,\n })\n )\n}\n\nasync function objectsList(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const optionNames: Record<string, string> = {\n \"--type\": \"objectTypeId\",\n \"--limit\": \"limit\",\n \"--offset\": \"offset\",\n \"--order-by\": \"orderBy\",\n \"--order\": \"order\",\n \"--id-prefix\": \"idPrefix\",\n \"--id-suffix\": \"idSuffix\",\n \"--created-after\": \"createdAfter\",\n \"--created-before\": \"createdBefore\",\n \"--updated-after\": \"updatedAfter\",\n \"--updated-before\": \"updatedBefore\",\n }\n const options = normalizeWindowOptions(parseQueryOptions(args, optionNames, \"objects list\"), {\n defaultLimit: CLI_LIMITS.list.default,\n maximumLimit: CLI_LIMITS.list.maximum,\n defaultOrder: DEFAULT_LIST_ORDER,\n offset: true,\n })\n options.orderBy = enumValue(\"--order-by\", options.orderBy ?? DEFAULT_OBJECT_ORDER_BY, [\n \"createdAt\",\n \"updatedAt\",\n \"primaryId\",\n ])\n for (const [name, flag] of [\n [\"createdAfter\", \"--created-after\"],\n [\"createdBefore\", \"--created-before\"],\n [\"updatedAfter\", \"--updated-after\"],\n [\"updatedBefore\", \"--updated-before\"],\n ] as const) {\n if (options[name] !== undefined) options[name] = rfc3339Value(flag, options[name])\n }\n requireOrderedRange(\n \"--created-after\",\n options.createdAfter,\n \"--created-before\",\n options.createdBefore\n )\n requireOrderedRange(\n \"--updated-after\",\n options.updatedAfter,\n \"--updated-before\",\n options.updatedBefore\n )\n writeJson(await api.get(\"/api/objects\", options))\n}\n\nasync function objectsGet(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(\"Usage: sixb objects get <object-type> <primary-id>...\")\n const { positionals } = parseCommandArgs(args, {}, \"objects get\", [2, Number.POSITIVE_INFINITY])\n const objectTypeId = positionals[0] ?? \"\"\n writeJson(\n await api.post(\"/api/objects/query\", {\n query: {\n kind: \"refs\",\n refs: positionals.slice(1).map((primaryId) => ({ objectTypeId, primaryId })),\n },\n includeTotal: false,\n })\n )\n}\n\nasync function objectsSearch(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) {\n return writeText(`Usage: sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]`)\n }\n const { positionals, options } = parseCommandArgs(\n args,\n { \"--limit\": \"string\" },\n \"objects search\",\n 1\n )\n const limit = String(\n integerInRange(\n \"--limit\",\n options[\"--limit\"] ?? String(CLI_LIMITS.search.default),\n 1,\n CLI_LIMITS.search.maximum\n )\n )\n writeJson(await api.get(\"/api/objects/search\", { q: positionals[0], limit }))\n}\n\nasync function objectsQuery(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(QUERY_HELP)\n const { options } = parseCommandArgs(\n args,\n {\n \"--example\": \"string\",\n \"--file\": \"string\",\n \"--include-total\": \"boolean\",\n \"--no-total\": \"boolean\",\n },\n \"objects query\"\n )\n if (options[\"--include-total\"] && options[\"--no-total\"])\n fail(\"--include-total and --no-total cannot be used together.\")\n if (options[\"--example\"]) {\n if (Object.keys(options).length !== 1) fail(\"--example cannot be combined with query options.\")\n const name = options[\"--example\"]\n if (name === \"list\") return writeText(Object.keys(QUERY_EXAMPLES).join(\" \"))\n const example = QUERY_EXAMPLES[name]\n if (!example) fail(`Unknown query example '${name}'. Run 'sixb objects query --example list'.`)\n return writeText(example)\n }\n const source = options[\"--file\"]\n const includeTotal = options[\"--include-total\"] ?? false\n if (!source) fail(\"objects query requires --file <path|->.\")\n const input = await readJson(source)\n const record = asRecord(input)\n const body = Object.hasOwn(record, \"query\")\n ? { ...record, ...(Object.hasOwn(record, \"includeTotal\") ? {} : { includeTotal }) }\n : { query: input, includeTotal }\n writeJson(await api.post(\"/api/objects/query\", body))\n}\n\nasync function objectsScalar(\n api: ApiClient,\n operation: \"count\" | \"exists\",\n args: readonly string[]\n): Promise<void> {\n if (requestsHelp(args)) return writeText(`Usage: sixb objects ${operation} --file <path|->`)\n const source = singleFileOption(args, `objects ${operation}`)\n const input = await readJson(source)\n const record = asRecord(input)\n writeJson(\n await api.post(`/api/objects/query/${operation}`, {\n query: Object.hasOwn(record, \"query\") ? record.query : input,\n })\n )\n}\n\nasync function objectsFacets(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) {\n return writeText(\n \"Usage: sixb objects facets --file <path|->\\n sixb objects facets --example\"\n )\n }\n const { options } = parseCommandArgs(\n args,\n { \"--file\": \"string\", \"--example\": \"boolean\" },\n \"objects facets\"\n )\n if (options[\"--example\"]) {\n if (options[\"--file\"]) fail(\"--example cannot be combined with --file.\")\n return writeText(FACETS_EXAMPLE)\n }\n if (!options[\"--file\"]) fail(\"objects facets requires --file <path|->.\")\n const body = await readJson(options[\"--file\"])\n const record = asRecord(body)\n if (!Object.hasOwn(record, \"query\") || !Object.hasOwn(record, \"facets\")) {\n fail(\"objects facets input must contain query and facets.\")\n }\n writeJson(await api.post(\"/api/objects/query/facets\", body))\n}\n\nasync function objectsLinks(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--link\": \"string\",\n \"--direction\": \"string\",\n \"--page-size\": \"string\",\n \"--page-token\": \"string\",\n \"--include-objects\": \"boolean\",\n },\n \"objects links\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const linkId = options[\"--link\"]\n const direction = enumValue(\"--direction\", options[\"--direction\"] ?? \"both\", [\n \"outgoing\",\n \"incoming\",\n \"both\",\n ])\n const pageSize = integerInRange(\n \"--page-size\",\n options[\"--page-size\"] ?? String(CLI_LIMITS.linkPage.default),\n 1,\n CLI_LIMITS.linkPage.maximum\n )\n const pageToken = options[\"--page-token\"]\n const includeObjects = options[\"--include-objects\"] ?? false\n writeJson(\n await api.post(\"/api/objects/query/links\", {\n query: { kind: \"refs\", refs: [{ objectTypeId, primaryId }] },\n direction,\n includeObjects,\n pageSize,\n ...(linkId ? { linkId } : {}),\n ...(pageToken ? { pageToken } : {}),\n })\n )\n}\n",
15
- "import type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { asRecord, asRecords } from \"./shared\"\n\nexport async function ontology(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub)) return writeText(GROUP_HELP.ontology)\n if (sub === \"list\") {\n if (requestsHelp(rest)) return writeText(\"Usage: sixb ontology list [--full]\")\n const { options } = parseCommandArgs(rest, { \"--full\": \"boolean\" }, \"ontology list\")\n const full = options[\"--full\"] ?? false\n const value = await api.get(\"/api/object-types\")\n if (full) return writeJson(value)\n if (!Array.isArray(value)) fail(\"The ontology API returned an invalid response.\")\n return writeJson(\n value.map((entry) => {\n const type = asRecord(entry)\n const properties = asRecords(type.properties)\n return {\n id: type.id,\n name: type.name,\n description: type.description,\n primaryPropertyId: properties.find((property) => property.primary === true)?.id,\n links: asRecords(type.links).map(\n ({ id, name, description, targetObjectTypeId, cardinality }) => ({\n id,\n name,\n ...(description === undefined ? {} : { description }),\n targetObjectTypeId,\n cardinality,\n })\n ),\n actions: asRecords(type.actions).map(({ id, name, description }) => ({\n id,\n name,\n ...(description === undefined ? {} : { description }),\n })),\n }\n })\n )\n }\n if (sub === \"get\") {\n if (requestsHelp(rest)) return writeText(\"Usage: sixb ontology get <object-type>\")\n const { positionals } = parseCommandArgs(rest, {}, \"ontology get\", 1)\n return writeJson(await api.get(`/api/object-types/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n fail(`Unknown ontology command '${sub}'.`)\n}\n",
14
+ "import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { inspectGraph } from \"../graph\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_LIST_ORDER, DEFAULT_OBJECT_ORDER_BY } from \"../policies\"\nimport { FACETS_EXAMPLE, OBJECTS_HELP, QUERY_EXAMPLES, QUERY_HELP, SEARCH_HELP } from \"./metadata\"\nimport {\n asRecord,\n normalizeWindowOptions,\n parseQueryOptions,\n readJson,\n singleFileOption,\n vectorProfileNames,\n} from \"./shared\"\n\nexport async function objects(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub)) return writeText(OBJECTS_HELP)\n switch (sub) {\n case \"inspect\":\n return objectsInspect(api, rest)\n case \"list\":\n return objectsList(api, rest)\n case \"get\":\n return objectsGet(api, rest)\n case \"search\":\n return objectsSearch(api, rest)\n case \"query\":\n return objectsQuery(api, rest)\n case \"count\":\n case \"exists\":\n return objectsScalar(api, sub, rest)\n case \"facets\":\n return objectsFacets(api, rest)\n case \"links\":\n return objectsLinks(api, rest)\n default:\n fail(`Unknown objects command '${sub}'.`)\n }\n}\n\nasync function objectsInspect(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--full\": \"boolean\",\n \"--depth\": \"string\",\n \"--max-objects\": \"string\",\n \"--max-links\": \"string\",\n },\n \"objects inspect\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const depth = integerInRange(\n \"--depth\",\n options[\"--depth\"] ?? String(CLI_LIMITS.inspect.depth.default),\n 0,\n CLI_LIMITS.inspect.depth.maximum\n )\n const maxObjects = integerInRange(\n \"--max-objects\",\n options[\"--max-objects\"] ?? String(CLI_LIMITS.inspect.objects.default),\n 1,\n CLI_LIMITS.inspect.objects.maximum\n )\n const maxLinks = integerInRange(\n \"--max-links\",\n options[\"--max-links\"] ?? String(CLI_LIMITS.inspect.links.default),\n 1,\n CLI_LIMITS.inspect.links.maximum\n )\n const full = options[\"--full\"] ?? false\n writeJson(\n await inspectGraph(api, objectTypeId, primaryId, {\n depth,\n maxObjects,\n maxLinks,\n full,\n })\n )\n}\n\nasync function objectsList(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const optionNames: Record<string, string> = {\n \"--type\": \"objectTypeId\",\n \"--limit\": \"limit\",\n \"--offset\": \"offset\",\n \"--order-by\": \"orderBy\",\n \"--order\": \"order\",\n \"--id-prefix\": \"idPrefix\",\n \"--id-suffix\": \"idSuffix\",\n \"--created-after\": \"createdAfter\",\n \"--created-before\": \"createdBefore\",\n \"--updated-after\": \"updatedAfter\",\n \"--updated-before\": \"updatedBefore\",\n }\n const options = normalizeWindowOptions(parseQueryOptions(args, optionNames, \"objects list\"), {\n defaultLimit: CLI_LIMITS.list.default,\n maximumLimit: CLI_LIMITS.list.maximum,\n defaultOrder: DEFAULT_LIST_ORDER,\n offset: true,\n })\n options.orderBy = enumValue(\"--order-by\", options.orderBy ?? DEFAULT_OBJECT_ORDER_BY, [\n \"createdAt\",\n \"updatedAt\",\n \"primaryId\",\n ])\n for (const [name, flag] of [\n [\"createdAfter\", \"--created-after\"],\n [\"createdBefore\", \"--created-before\"],\n [\"updatedAfter\", \"--updated-after\"],\n [\"updatedBefore\", \"--updated-before\"],\n ] as const) {\n if (options[name] !== undefined) options[name] = rfc3339Value(flag, options[name])\n }\n requireOrderedRange(\n \"--created-after\",\n options.createdAfter,\n \"--created-before\",\n options.createdBefore\n )\n requireOrderedRange(\n \"--updated-after\",\n options.updatedAfter,\n \"--updated-before\",\n options.updatedBefore\n )\n writeJson(await api.get(\"/api/objects\", options))\n}\n\nasync function objectsGet(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(\"Usage: sixb objects get <object-type> <primary-id>...\")\n const { positionals } = parseCommandArgs(args, {}, \"objects get\", [2, Number.POSITIVE_INFINITY])\n const objectTypeId = positionals[0] ?? \"\"\n writeJson(\n await api.post(\"/api/objects/query\", {\n query: {\n kind: \"refs\",\n refs: positionals.slice(1).map((primaryId) => ({ objectTypeId, primaryId })),\n },\n includeTotal: false,\n })\n )\n}\n\nasync function objectsSearch(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(SEARCH_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n { \"--limit\": \"string\", \"--type\": \"string\", \"--vector-profile\": \"string\" },\n \"objects search\",\n 1\n )\n const text = positionals[0] ?? \"\"\n const limit = integerInRange(\n \"--limit\",\n options[\"--limit\"] ?? String(CLI_LIMITS.search.default),\n 1,\n CLI_LIMITS.search.maximum\n )\n const objectTypeId = options[\"--type\"]\n if (!objectTypeId) {\n if (options[\"--vector-profile\"]) fail(\"--vector-profile requires --type.\")\n return writeJson(await api.get(\"/api/objects/search\", { q: text, limit: String(limit) }))\n }\n if (!text.trim() || text.length > CLI_LIMITS.vectorSearchText.maximum) {\n fail(\n `Semantic search text must be nonempty and at most ${CLI_LIMITS.vectorSearchText.maximum} characters.`\n )\n }\n const objectType = asRecord(\n await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`)\n )\n const profile = selectVectorProfile(objectTypeId, objectType, options[\"--vector-profile\"])\n writeJson(\n await api.post(\"/api/objects/query\", {\n query: {\n kind: \"vector\",\n input: { kind: \"start\", objectTypeId },\n vector: text,\n profile,\n k: limit,\n },\n includeTotal: false,\n })\n )\n}\n\n/** Profiles are chosen by name, so a type with several must never be searched by guesswork. */\nfunction selectVectorProfile(\n objectTypeId: string,\n objectType: Record<string, unknown>,\n requested: string | undefined\n): string {\n const profiles = vectorProfileNames(objectType)\n if (profiles.length === 0) {\n fail(\n `${objectTypeId} has no vector search profile.`,\n \"invalid_arguments\",\n \"Omit --type for identifier and full-text search.\"\n )\n }\n if (requested !== undefined) {\n if (!profiles.includes(requested)) {\n fail(`${objectTypeId} has no vector profile '${requested}'. Use ${profiles.join(\", \")}.`)\n }\n return requested\n }\n if (profiles.length > 1) {\n fail(\n `${objectTypeId} has vector profiles ${profiles.join(\", \")}. Pass --vector-profile <name>.`\n )\n }\n return profiles[0] ?? \"\"\n}\n\nasync function objectsQuery(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(QUERY_HELP)\n const { options } = parseCommandArgs(\n args,\n {\n \"--example\": \"string\",\n \"--file\": \"string\",\n \"--include-total\": \"boolean\",\n \"--no-total\": \"boolean\",\n },\n \"objects query\"\n )\n if (options[\"--include-total\"] && options[\"--no-total\"])\n fail(\"--include-total and --no-total cannot be used together.\")\n if (options[\"--example\"]) {\n if (Object.keys(options).length !== 1) fail(\"--example cannot be combined with query options.\")\n const name = options[\"--example\"]\n if (name === \"list\") return writeText(Object.keys(QUERY_EXAMPLES).join(\" \"))\n const example = QUERY_EXAMPLES[name]\n if (!example) fail(`Unknown query example '${name}'. Run 'sixb objects query --example list'.`)\n return writeText(example)\n }\n const source = options[\"--file\"]\n const includeTotal = options[\"--include-total\"] ?? false\n if (!source) fail(\"objects query requires --file <path|->.\")\n const input = await readJson(source)\n const record = asRecord(input)\n const body = Object.hasOwn(record, \"query\")\n ? { ...record, ...(Object.hasOwn(record, \"includeTotal\") ? {} : { includeTotal }) }\n : { query: input, includeTotal }\n writeJson(await api.post(\"/api/objects/query\", body))\n}\n\nasync function objectsScalar(\n api: ApiClient,\n operation: \"count\" | \"exists\",\n args: readonly string[]\n): Promise<void> {\n if (requestsHelp(args)) return writeText(`Usage: sixb objects ${operation} --file <path|->`)\n const source = singleFileOption(args, `objects ${operation}`)\n const input = await readJson(source)\n const record = asRecord(input)\n writeJson(\n await api.post(`/api/objects/query/${operation}`, {\n query: Object.hasOwn(record, \"query\") ? record.query : input,\n })\n )\n}\n\nasync function objectsFacets(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) {\n return writeText(\n \"Usage: sixb objects facets --file <path|->\\n sixb objects facets --example\"\n )\n }\n const { options } = parseCommandArgs(\n args,\n { \"--file\": \"string\", \"--example\": \"boolean\" },\n \"objects facets\"\n )\n if (options[\"--example\"]) {\n if (options[\"--file\"]) fail(\"--example cannot be combined with --file.\")\n return writeText(FACETS_EXAMPLE)\n }\n if (!options[\"--file\"]) fail(\"objects facets requires --file <path|->.\")\n const body = await readJson(options[\"--file\"])\n const record = asRecord(body)\n if (!Object.hasOwn(record, \"query\") || !Object.hasOwn(record, \"facets\")) {\n fail(\"objects facets input must contain query and facets.\")\n }\n writeJson(await api.post(\"/api/objects/query/facets\", body))\n}\n\nasync function objectsLinks(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--link\": \"string\",\n \"--direction\": \"string\",\n \"--page-size\": \"string\",\n \"--page-token\": \"string\",\n \"--include-objects\": \"boolean\",\n },\n \"objects links\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const linkId = options[\"--link\"]\n const direction = enumValue(\"--direction\", options[\"--direction\"] ?? \"both\", [\n \"outgoing\",\n \"incoming\",\n \"both\",\n ])\n const pageSize = integerInRange(\n \"--page-size\",\n options[\"--page-size\"] ?? String(CLI_LIMITS.linkPage.default),\n 1,\n CLI_LIMITS.linkPage.maximum\n )\n const pageToken = options[\"--page-token\"]\n const includeObjects = options[\"--include-objects\"] ?? false\n writeJson(\n await api.post(\"/api/objects/query/links\", {\n query: { kind: \"refs\", refs: [{ objectTypeId, primaryId }] },\n direction,\n includeObjects,\n pageSize,\n ...(linkId ? { linkId } : {}),\n ...(pageToken ? { pageToken } : {}),\n })\n )\n}\n",
15
+ "import type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { asRecord, asRecords, vectorProfileNames } from \"./shared\"\n\nexport async function ontology(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub)) return writeText(GROUP_HELP.ontology)\n if (sub === \"list\") {\n if (requestsHelp(rest)) return writeText(\"Usage: sixb ontology list [--full]\")\n const { options } = parseCommandArgs(rest, { \"--full\": \"boolean\" }, \"ontology list\")\n const full = options[\"--full\"] ?? false\n const value = await api.get(\"/api/object-types\")\n if (full) return writeJson(value)\n if (!Array.isArray(value)) fail(\"The ontology API returned an invalid response.\")\n return writeJson(\n value.map((entry) => {\n const type = asRecord(entry)\n const properties = asRecords(type.properties)\n const vectorProfiles = vectorProfileNames(type)\n return {\n id: type.id,\n name: type.name,\n description: type.description,\n primaryPropertyId: properties.find((property) => property.primary === true)?.id,\n ...(vectorProfiles.length === 0 ? {} : { vectorProfiles }),\n links: asRecords(type.links).map(\n ({ id, name, description, targetObjectTypeId, cardinality }) => ({\n id,\n name,\n ...(description === undefined ? {} : { description }),\n targetObjectTypeId,\n cardinality,\n })\n ),\n actions: asRecords(type.actions).map(({ id, name, description }) => ({\n id,\n name,\n ...(description === undefined ? {} : { description }),\n })),\n }\n })\n )\n }\n if (sub === \"get\") {\n if (requestsHelp(rest)) return writeText(\"Usage: sixb ontology get <object-type>\")\n const { positionals } = parseCommandArgs(rest, {}, \"ontology get\", 1)\n return writeJson(await api.get(`/api/object-types/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n fail(`Unknown ontology command '${sub}'.`)\n}\n",
16
16
  "import type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\n\nexport async function project(api: ApiClient, args: readonly string[]): Promise<void> {\n if (!args[0] || isHelp(args[0]) || (args[0] === \"show\" && requestsHelp(args.slice(1)))) {\n return writeText(GROUP_HELP.project)\n }\n if (args[0] !== \"show\") fail(`Unknown project command '${args[0]}'.`)\n parseCommandArgs(args.slice(1), {}, \"project show\")\n writeJson(await api.get(\"/api/project\"))\n}\n",
17
17
  "import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_LIST_ORDER } from \"../policies\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { normalizeWindowOptions, parseQueryOptions } from \"./shared\"\n\nconst ACTION_RUN_STATUSES = [\"queued\", \"running\", \"succeeded\", \"failed\", \"cancelled\"] as const\nconst WORKFLOW_RUN_STATUSES = [\n \"queued\",\n \"running\",\n \"waiting\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n] as const\n\nexport async function runs(\n api: ApiClient,\n kind: \"action\" | \"workflow\",\n args: readonly string[]\n): Promise<void> {\n const [sub, ...rest] = args\n const group = `${kind}-runs` as \"action-runs\" | \"workflow-runs\"\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP[group])\n if (sub === \"get\") {\n const { positionals } = parseCommandArgs(rest, {}, `${group} get`, 1)\n return writeJson(await api.get(`/api/${group}/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n if (sub === \"list\") {\n const common = {\n \"--status\": \"status\",\n \"--started-after\": \"startedAfter\",\n \"--started-before\": \"startedBefore\",\n \"--limit\": \"limit\",\n \"--offset\": \"offset\",\n \"--order\": \"order\",\n }\n const action = {\n ...common,\n \"--action\": \"actionId\",\n \"--type\": \"objectTypeId\",\n \"--id\": \"primaryId\",\n }\n const workflow = { ...common, \"--workflow\": \"workflowId\" }\n const options = normalizeWindowOptions(\n parseQueryOptions(rest, kind === \"action\" ? action : workflow, `${group} list`),\n {\n defaultLimit: CLI_LIMITS.list.default,\n maximumLimit: CLI_LIMITS.list.maximum,\n defaultOrder: DEFAULT_LIST_ORDER,\n offset: true,\n }\n )\n if (options.status !== undefined) {\n options.status = enumValue(\n \"--status\",\n options.status,\n kind === \"action\" ? ACTION_RUN_STATUSES : WORKFLOW_RUN_STATUSES\n )\n }\n for (const [name, flag] of [\n [\"startedAfter\", \"--started-after\"],\n [\"startedBefore\", \"--started-before\"],\n ] as const) {\n if (options[name] !== undefined) options[name] = rfc3339Value(flag, options[name])\n }\n requireOrderedRange(\n \"--started-after\",\n options.startedAfter,\n \"--started-before\",\n options.startedBefore\n )\n return writeJson(await api.get(`/api/${group}`, options))\n }\n fail(`Unknown ${group} command '${sub}'.`)\n}\n",
18
18
  "import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_TELEMETRY_ORDER } from \"../policies\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { normalizeWindowOptions, readJson, singleFileOption } from \"./shared\"\n\nexport async function telemetry(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.telemetry)\n if (sub === \"latest\") {\n const { positionals } = parseCommandArgs(rest, {}, \"telemetry latest\", 3)\n return writeJson(await api.get(telemetryPath(positionals, \"latest\")))\n }\n if (sub === \"history\") {\n const { positionals, options } = parseCommandArgs(\n rest,\n {\n \"--from\": \"string\",\n \"--to\": \"string\",\n \"--limit\": \"string\",\n \"--order\": \"string\",\n },\n \"telemetry history\",\n 3\n )\n const query = normalizeWindowOptions(\n {\n from: options[\"--from\"],\n to: options[\"--to\"],\n limit: options[\"--limit\"],\n order: options[\"--order\"],\n },\n {\n defaultLimit: CLI_LIMITS.telemetryHistory.default,\n maximumLimit: CLI_LIMITS.telemetryHistory.maximum,\n defaultOrder: DEFAULT_TELEMETRY_ORDER,\n }\n )\n if (query.from !== undefined) query.from = rfc3339Value(\"--from\", query.from)\n if (query.to !== undefined) query.to = rfc3339Value(\"--to\", query.to)\n requireOrderedRange(\"--from\", query.from, \"--to\", query.to)\n return writeJson(await api.get(telemetryPath(positionals, \"history\"), query))\n }\n if (sub === \"query\") {\n return writeJson(\n await api.post(\n \"/api/telemetry/history\",\n normalizeTelemetryQueryInput(await readJson(singleFileOption(rest, \"telemetry query\")))\n )\n )\n }\n fail(`Unknown telemetry command '${sub}'.`)\n}\n\nfunction telemetryPath(args: readonly string[], terminal: \"latest\" | \"history\"): string {\n return `/api/objects/${encodeURIComponent(args[0] ?? \"\")}/${encodeURIComponent(args[1] ?? \"\")}/telemetry/${encodeURIComponent(args[2] ?? \"\")}/${terminal}`\n}\n\nfunction normalizeTelemetryQueryInput(input: unknown): Record<string, unknown> {\n if (Array.isArray(input) || typeof input !== \"object\" || input === null) {\n fail(\"Telemetry query input must be a JSON object.\")\n }\n const body = { ...input } as Record<string, unknown>\n const rawLimit = body.limitPerSeries\n if (rawLimit !== undefined && typeof rawLimit !== \"number\") {\n fail(\"limitPerSeries must be a number.\")\n }\n body.limitPerSeries = integerInRange(\n \"limitPerSeries\",\n String(rawLimit ?? CLI_LIMITS.telemetryHistory.default),\n 1,\n CLI_LIMITS.telemetryHistory.maximum\n )\n const rawOrder = body.order\n if (rawOrder !== undefined && typeof rawOrder !== \"string\") {\n fail(\"order must be a string.\")\n }\n body.order = enumValue(\"order\", rawOrder ?? DEFAULT_TELEMETRY_ORDER, [\"asc\", \"desc\"])\n for (const field of [\"from\", \"to\"] as const) {\n const value = body[field]\n if (value === undefined) continue\n if (typeof value !== \"string\") fail(`${field} must be an RFC 3339 timestamp.`)\n body[field] = rfc3339Value(field, value)\n }\n requireOrderedRange(\"from\", body.from as string | undefined, \"to\", body.to as string | undefined)\n return body\n}\n",
@@ -20,7 +20,7 @@
20
20
  "import type { ApiClient } from \"../api-client\"\nimport { fail } from \"../output\"\nimport { actions } from \"./actions\"\nimport { files } from \"./files\"\nimport { objects } from \"./objects\"\nimport { ontology } from \"./ontology\"\nimport { project } from \"./project\"\nimport { runs } from \"./runs\"\nimport { telemetry } from \"./telemetry\"\nimport { workflows } from \"./workflows\"\n\nexport const INSTANCE_COMMANDS = [\n \"project\",\n \"ontology\",\n \"objects\",\n \"telemetry\",\n \"actions\",\n \"action-runs\",\n \"files\",\n \"workflows\",\n \"workflow-runs\",\n] as const\n\nexport type InstanceCommand = (typeof INSTANCE_COMMANDS)[number]\n\nexport function isInstanceCommand(command: string): command is InstanceCommand {\n return (INSTANCE_COMMANDS as readonly string[]).includes(command)\n}\n\nexport async function dispatch(\n api: ApiClient,\n command: string,\n args: readonly string[]\n): Promise<void> {\n switch (command) {\n case \"project\":\n return project(api, args)\n case \"ontology\":\n return ontology(api, args)\n case \"objects\":\n return objects(api, args)\n case \"telemetry\":\n return telemetry(api, args)\n case \"actions\":\n return actions(api, args)\n case \"action-runs\":\n return runs(api, \"action\", args)\n case \"files\":\n return files(api, args)\n case \"workflows\":\n return workflows(api, args)\n case \"workflow-runs\":\n return runs(api, \"workflow\", args)\n default:\n fail(`Unknown command '${command}'. Run 'sixb --help'.`)\n }\n}\n",
21
21
  "import { ApiClient } from \"./api-client\"\nimport { dispatch } from \"./commands\"\n\nexport interface SandboxInstanceCliMode {\n readonly kind: \"sandbox\"\n readonly baseUrl: string\n readonly runContextPath: string\n}\n\nexport interface LocalInstanceCliMode {\n readonly kind: \"local\"\n readonly baseUrl: string\n readonly token?: string\n readonly profile?: string\n}\n\nexport type InstanceCliMode = SandboxInstanceCliMode | LocalInstanceCliMode\n\nexport interface RunInstanceCliInput {\n readonly args: readonly string[]\n readonly mode: InstanceCliMode\n}\n\nexport async function runInstanceCli(input: RunInstanceCliInput): Promise<void> {\n const [command, ...args] = input.args\n await dispatch(createInstanceApiClient(input.mode), command ?? \"\", args)\n}\n\nexport function createInstanceApiClient(mode: InstanceCliMode): ApiClient {\n return new ApiClient({\n baseUrl: mode.baseUrl,\n ...(mode.kind === \"local\" && mode.token ? { authorization: `Bearer ${mode.token}` } : {}),\n missingBaseUrlMessage:\n mode.kind === \"sandbox\"\n ? \"SIXB_API_BASE_URL is not set.\"\n : \"The selected Sixb profile has no API URL.\",\n unavailableMessage:\n mode.kind === \"sandbox\"\n ? \"The Sixb API gateway could not be reached.\"\n : \"The Sixb API could not be reached.\",\n unavailableHint:\n mode.kind === \"sandbox\"\n ? \"Run 'sixb doctor' to verify the sandbox runtime and gateway.\"\n : \"Run 'sixb status' to verify the current profile.\",\n })\n}\n"
22
22
  ],
23
- "mappings": "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",
24
- "debugId": "89FD14967D5A33DF64756E2164756E21",
23
+ "mappings": "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",
24
+ "debugId": "5986EDD7566E527B64756E2164756E21",
25
25
  "names": []
26
26
  }
@@ -8,6 +8,10 @@ export declare const CLI_LIMITS: {
8
8
  readonly default: 20;
9
9
  readonly maximum: 50;
10
10
  };
11
+ /** Mirrors the server's vector query text bound so oversized text fails before any request. */
12
+ readonly vectorSearchText: {
13
+ readonly maximum: 8000;
14
+ };
11
15
  readonly telemetryHistory: {
12
16
  readonly default: 100;
13
17
  readonly maximum: 1000;
@@ -1 +1 @@
1
- {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWb,CAAA;AAEV,eAAO,MAAM,kBAAkB,EAAG,MAAe,CAAA;AACjD,eAAO,MAAM,uBAAuB,EAAG,WAAoB,CAAA;AAC3D,eAAO,MAAM,uBAAuB,EAAG,MAAe,CAAA"}
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,eAAO,MAAM,UAAU;;;;;;;;;IAGrB,+FAA+F;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUvF,CAAA;AAEV,eAAO,MAAM,kBAAkB,EAAG,MAAe,CAAA;AACjD,eAAO,MAAM,uBAAuB,EAAG,WAAoB,CAAA;AAC3D,eAAO,MAAM,uBAAuB,EAAG,MAAe,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/cli-core",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Shared instance command runtime for Sixb CLIs",
5
5
  "keywords": [
6
6
  "sixb",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "license": "MIT",
41
41
  "engines": {
42
- "bun": ">=1.3.0"
42
+ "bun": ">=1.4.2"
43
43
  },
44
44
  "publishConfig": {
45
45
  "access": "public"
@@ -25,7 +25,9 @@ Objects:
25
25
  sixb objects inspect <type> <id> Inspect an object and its related graph in one command
26
26
  sixb objects list [options] Browse materialized objects
27
27
  sixb objects get <type> <id>... Exact lookup through opaque object references
28
- sixb objects search <text> Search visible objects
28
+ sixb objects search <text> Search visible objects by id prefix and full text
29
+ sixb objects search <text> --type <type>
30
+ Semantic search through the type's vector profile
29
31
  sixb objects query --file <file|-> Execute query IR from JSON
30
32
  sixb objects count --file <file|-> Count a query without returning rows
31
33
  sixb objects exists --file <file|-> Test whether a query has a match
@@ -63,11 +65,26 @@ export function renderInstanceHelp(mode: "local" | "sandbox"): string {
63
65
  return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP
64
66
  }
65
67
 
68
+ const SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.
69
+ With --type, the server embeds the text with the profile's model and ranks results by score,
70
+ a cosine similarity where higher is closer. \`sixb ontology list\` shows each type's
71
+ vectorProfiles. To combine semantic search with filters, run
72
+ \`sixb objects query --example vector\`.`
73
+
74
+ export const SEARCH_HELP = `Usage:
75
+ sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
76
+ sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]
77
+
78
+ --limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several
79
+ profiles.
80
+
81
+ ${SEARCH_DETAILS}`
82
+
66
83
  export const OBJECTS_HELP = `Usage:
67
84
  sixb objects inspect <object-type> <primary-id> [options]
68
85
  sixb objects list [options]
69
86
  sixb objects get <object-type> <primary-id>...
70
- sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
87
+ sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]
71
88
  sixb objects query --file <path|-> [--include-total|--no-total]
72
89
  sixb objects query --example <name>
73
90
  sixb objects count --file <path|->
@@ -87,6 +104,11 @@ List options:
87
104
  --created-after|--created-before <RFC3339>
88
105
  --updated-after|--updated-before <RFC3339>
89
106
 
107
+ Search options:
108
+ --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}
109
+ --type <id> Semantic search through this type's vector profile
110
+ --vector-profile <name> Required when the type declares several profiles
111
+
90
112
  Links options:
91
113
  --link <link-id>
92
114
  --direction outgoing|incoming|both Defaults to both
@@ -106,14 +128,14 @@ default and returns a bounded graph.
106
128
  Inspect omits materialization timestamps and ontology definitions by default. Use \`--full\` when
107
129
  storage timestamps, declared links, or available actions are needed.
108
130
 
109
- Search returns at most ${CLI_LIMITS.search.maximum} matches and defaults to ${CLI_LIMITS.search.default}.
131
+ ${SEARCH_DETAILS}
110
132
 
111
133
  \`objects get\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or
112
134
  % are safe. Identifiers are case-sensitive.`
113
135
 
114
136
  export const QUERY_HELP = `Usage:
115
137
  sixb objects query --file <path|-> [--include-total|--no-total]
116
- sixb objects query --example <exact|filter|incoming|expand|sort|page>
138
+ sixb objects query --example <exact|filter|incoming|expand|sort|page|vector>
117
139
  sixb objects query --example list
118
140
 
119
141
  Input is a query node. A full {"query": ...} request is also accepted.
@@ -124,7 +146,8 @@ Query nodes compose through input:
124
146
  filter {"kind":"filter","input":<query>,"predicate":<predicate>}
125
147
  text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
126
148
  traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
127
- vector, set, sort, limit, page, project, and expand are also supported.
149
+ vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
150
+ set, sort, limit, page, project, and expand are also supported.
128
151
 
129
152
  Predicates use op, not kind:
130
153
  and/or, not, {"op":"eq","propertyId":"status","value":"open"}, neq, lt, lte, gt, gte,
@@ -134,7 +157,10 @@ Traversal and expansion directions are outgoing or incoming. For incoming relati
134
157
  is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
135
158
 
136
159
  Run \`sixb ontology get <type>\` first; never guess property or link ids. Use refs for exact
137
- identities. Put limits and pages inside the query tree.`
160
+ identities. Put limits and pages inside the query tree.
161
+
162
+ Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
163
+ optionally under filters; k bounds the ranked matches and results carry a score.`
138
164
 
139
165
  export const GROUP_HELP = {
140
166
  doctor: "Usage: sixb doctor",
@@ -206,6 +232,7 @@ export const QUERY_EXAMPLES: Readonly<Record<string, string>> = {
206
232
  expand: `{"kind":"expand","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"expansions":[{"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment","limit":${CLI_LIMITS.list.default}}]}`,
207
233
  sort: `{"kind":"limit","input":{"kind":"sort","input":{"kind":"start","objectTypeId":"Customer"},"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]},"limit":${CLI_LIMITS.list.default}}`,
208
234
  page: `{"kind":"page","input":{"kind":"start","objectTypeId":"Customer"},"pageSize":${CLI_LIMITS.list.default}}`,
235
+ vector: `{"kind":"vector","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Product"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"vector":"waterproof trail shoes","profile":"content","k":${CLI_LIMITS.search.default}}`,
209
236
  }
210
237
 
211
238
  export const FACETS_EXAMPLE =
@@ -11,13 +11,14 @@ import {
11
11
  import { inspectGraph } from "../graph"
12
12
  import { fail, writeJson, writeText } from "../output"
13
13
  import { CLI_LIMITS, DEFAULT_LIST_ORDER, DEFAULT_OBJECT_ORDER_BY } from "../policies"
14
- import { FACETS_EXAMPLE, OBJECTS_HELP, QUERY_EXAMPLES, QUERY_HELP } from "./metadata"
14
+ import { FACETS_EXAMPLE, OBJECTS_HELP, QUERY_EXAMPLES, QUERY_HELP, SEARCH_HELP } from "./metadata"
15
15
  import {
16
16
  asRecord,
17
17
  normalizeWindowOptions,
18
18
  parseQueryOptions,
19
19
  readJson,
20
20
  singleFileOption,
21
+ vectorProfileNames,
21
22
  } from "./shared"
22
23
 
23
24
  export async function objects(api: ApiClient, args: readonly string[]): Promise<void> {
@@ -155,24 +156,74 @@ async function objectsGet(api: ApiClient, args: readonly string[]): Promise<void
155
156
  }
156
157
 
157
158
  async function objectsSearch(api: ApiClient, args: readonly string[]): Promise<void> {
158
- if (requestsHelp(args)) {
159
- return writeText(`Usage: sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]`)
160
- }
159
+ if (requestsHelp(args)) return writeText(SEARCH_HELP)
161
160
  const { positionals, options } = parseCommandArgs(
162
161
  args,
163
- { "--limit": "string" },
162
+ { "--limit": "string", "--type": "string", "--vector-profile": "string" },
164
163
  "objects search",
165
164
  1
166
165
  )
167
- const limit = String(
168
- integerInRange(
169
- "--limit",
170
- options["--limit"] ?? String(CLI_LIMITS.search.default),
171
- 1,
172
- CLI_LIMITS.search.maximum
166
+ const text = positionals[0] ?? ""
167
+ const limit = integerInRange(
168
+ "--limit",
169
+ options["--limit"] ?? String(CLI_LIMITS.search.default),
170
+ 1,
171
+ CLI_LIMITS.search.maximum
172
+ )
173
+ const objectTypeId = options["--type"]
174
+ if (!objectTypeId) {
175
+ if (options["--vector-profile"]) fail("--vector-profile requires --type.")
176
+ return writeJson(await api.get("/api/objects/search", { q: text, limit: String(limit) }))
177
+ }
178
+ if (!text.trim() || text.length > CLI_LIMITS.vectorSearchText.maximum) {
179
+ fail(
180
+ `Semantic search text must be nonempty and at most ${CLI_LIMITS.vectorSearchText.maximum} characters.`
173
181
  )
182
+ }
183
+ const objectType = asRecord(
184
+ await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`)
185
+ )
186
+ const profile = selectVectorProfile(objectTypeId, objectType, options["--vector-profile"])
187
+ writeJson(
188
+ await api.post("/api/objects/query", {
189
+ query: {
190
+ kind: "vector",
191
+ input: { kind: "start", objectTypeId },
192
+ vector: text,
193
+ profile,
194
+ k: limit,
195
+ },
196
+ includeTotal: false,
197
+ })
174
198
  )
175
- writeJson(await api.get("/api/objects/search", { q: positionals[0], limit }))
199
+ }
200
+
201
+ /** Profiles are chosen by name, so a type with several must never be searched by guesswork. */
202
+ function selectVectorProfile(
203
+ objectTypeId: string,
204
+ objectType: Record<string, unknown>,
205
+ requested: string | undefined
206
+ ): string {
207
+ const profiles = vectorProfileNames(objectType)
208
+ if (profiles.length === 0) {
209
+ fail(
210
+ `${objectTypeId} has no vector search profile.`,
211
+ "invalid_arguments",
212
+ "Omit --type for identifier and full-text search."
213
+ )
214
+ }
215
+ if (requested !== undefined) {
216
+ if (!profiles.includes(requested)) {
217
+ fail(`${objectTypeId} has no vector profile '${requested}'. Use ${profiles.join(", ")}.`)
218
+ }
219
+ return requested
220
+ }
221
+ if (profiles.length > 1) {
222
+ fail(
223
+ `${objectTypeId} has vector profiles ${profiles.join(", ")}. Pass --vector-profile <name>.`
224
+ )
225
+ }
226
+ return profiles[0] ?? ""
176
227
  }
177
228
 
178
229
  async function objectsQuery(api: ApiClient, args: readonly string[]): Promise<void> {
@@ -2,7 +2,7 @@ import type { ApiClient } from "../api-client"
2
2
  import { isHelp, parseCommandArgs, requestsHelp } from "../arguments"
3
3
  import { fail, writeJson, writeText } from "../output"
4
4
  import { GROUP_HELP } from "./metadata"
5
- import { asRecord, asRecords } from "./shared"
5
+ import { asRecord, asRecords, vectorProfileNames } from "./shared"
6
6
 
7
7
  export async function ontology(api: ApiClient, args: readonly string[]): Promise<void> {
8
8
  const [sub, ...rest] = args
@@ -18,11 +18,13 @@ export async function ontology(api: ApiClient, args: readonly string[]): Promise
18
18
  value.map((entry) => {
19
19
  const type = asRecord(entry)
20
20
  const properties = asRecords(type.properties)
21
+ const vectorProfiles = vectorProfileNames(type)
21
22
  return {
22
23
  id: type.id,
23
24
  name: type.name,
24
25
  description: type.description,
25
26
  primaryPropertyId: properties.find((property) => property.primary === true)?.id,
27
+ ...(vectorProfiles.length === 0 ? {} : { vectorProfiles }),
26
28
  links: asRecords(type.links).map(
27
29
  ({ id, name, description, targetObjectTypeId, cardinality }) => ({
28
30
  id,
@@ -84,6 +84,11 @@ export function asRecords(value: unknown): Record<string, unknown>[] {
84
84
  return Array.isArray(value) ? value.map(asRecord) : []
85
85
  }
86
86
 
87
+ /** Names of an object type definition's `search.vectors` profiles, in declaration order. */
88
+ export function vectorProfileNames(objectType: Record<string, unknown>): string[] {
89
+ return Object.keys(asRecord(asRecord(objectType.search).vectors))
90
+ }
91
+
87
92
  export function isFileError(error: unknown, code: string): error is NodeJS.ErrnoException {
88
93
  return error instanceof Error && "code" in error && error.code === code
89
94
  }
package/src/policies.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  export const CLI_LIMITS = {
3
3
  list: { default: 20, maximum: 1_000 },
4
4
  search: { default: 20, maximum: 50 },
5
+ /** Mirrors the server's vector query text bound so oversized text fails before any request. */
6
+ vectorSearchText: { maximum: 8_000 },
5
7
  telemetryHistory: { default: 100, maximum: 1_000 },
6
8
  linkPage: { default: 100, maximum: 1_000 },
7
9
  inspect: {