@sixb/cli-core 0.1.5 → 0.1.7

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: string;
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":"AAsEA,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,QA0C0D,CAAA;AAEjF,eAAO,MAAM,UAAU;;;;;;;;;;;CA2Db,CAAA;AAEV,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3D,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: {
@@ -301,11 +302,16 @@ Discovery:
301
302
  sixb ontology list Compact visible type and relationship catalog
302
303
  sixb ontology get <type> Inspect one object type, properties, links, and actions
303
304
 
305
+ When you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use
306
+ \`sixb ontology get\` for a type that has no file there.
307
+
304
308
  Objects:
305
309
  sixb objects inspect <type> <id> Inspect an object and its related graph in one command
306
310
  sixb objects list [options] Browse materialized objects
307
311
  sixb objects get <type> <id>... Exact lookup through opaque object references
308
- sixb objects search <text> Search visible objects
312
+ sixb objects search <text> Search visible objects by id prefix and full text
313
+ sixb objects search <text> --type <type>
314
+ Semantic search through the type's vector profile
309
315
  sixb objects query --file <file|-> Execute query IR from JSON
310
316
  sixb objects count --file <file|-> Count a query without returning rows
311
317
  sixb objects exists --file <file|-> Test whether a query has a match
@@ -330,15 +336,31 @@ Run \`sixb <group> --help\` or \`sixb <group> <command> --help\` for exact argum
330
336
  For query IR, run \`sixb objects query --help\` and \`sixb objects query --example list\`.`;
331
337
  var LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace("Sixb agent CLI", "Sixb instance CLI").replace("The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.", "The CLI uses the selected local profile and its API credentials.").replace(` sixb doctor Check the sandbox and API gateway
332
338
  sixb context Print the current run context
339
+ `, "").replace(`
340
+ When you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use
341
+ \`sixb ontology get\` for a type that has no file there.
333
342
  `, "");
334
343
  function renderInstanceHelp(mode) {
335
344
  return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP;
336
345
  }
346
+ var SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.
347
+ With --type, the server embeds the text with the profile's model and ranks results by score,
348
+ a cosine similarity where higher is closer. \`sixb ontology list\` shows each type's
349
+ vectorProfiles. To combine semantic search with filters, run
350
+ \`sixb objects query --example vector\`.`;
351
+ var SEARCH_HELP = `Usage:
352
+ sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
353
+ sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]
354
+
355
+ --limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several
356
+ profiles.
357
+
358
+ ${SEARCH_DETAILS}`;
337
359
  var OBJECTS_HELP = `Usage:
338
360
  sixb objects inspect <object-type> <primary-id> [options]
339
361
  sixb objects list [options]
340
362
  sixb objects get <object-type> <primary-id>...
341
- sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
363
+ sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]
342
364
  sixb objects query --file <path|-> [--include-total|--no-total]
343
365
  sixb objects query --example <name>
344
366
  sixb objects count --file <path|->
@@ -358,6 +380,11 @@ List options:
358
380
  --created-after|--created-before <RFC3339>
359
381
  --updated-after|--updated-before <RFC3339>
360
382
 
383
+ Search options:
384
+ --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}
385
+ --type <id> Semantic search through this type's vector profile
386
+ --vector-profile <name> Required when the type declares several profiles
387
+
361
388
  Links options:
362
389
  --link <link-id>
363
390
  --direction outgoing|incoming|both Defaults to both
@@ -377,13 +404,13 @@ default and returns a bounded graph.
377
404
  Inspect omits materialization timestamps and ontology definitions by default. Use \`--full\` when
378
405
  storage timestamps, declared links, or available actions are needed.
379
406
 
380
- Search returns at most ${CLI_LIMITS.search.maximum} matches and defaults to ${CLI_LIMITS.search.default}.
407
+ ${SEARCH_DETAILS}
381
408
 
382
409
  \`objects get\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or
383
410
  % are safe. Identifiers are case-sensitive.`;
384
411
  var QUERY_HELP = `Usage:
385
412
  sixb objects query --file <path|-> [--include-total|--no-total]
386
- sixb objects query --example <exact|filter|incoming|expand|sort|page>
413
+ sixb objects query --example <name>
387
414
  sixb objects query --example list
388
415
 
389
416
  Input is a query node. A full {"query": ...} request is also accepted.
@@ -394,17 +421,36 @@ Query nodes compose through input:
394
421
  filter {"kind":"filter","input":<query>,"predicate":<predicate>}
395
422
  text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
396
423
  traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
397
- vector, set, sort, limit, page, project, and expand are also supported.
424
+ set {"kind":"set","op":"union","inputs":[<query>,<query>]} op: union, intersect, subtract
425
+ sort {"kind":"sort","input":<query>,"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]}
426
+ limit {"kind":"limit","input":<query>,"limit":${CLI_LIMITS.list.default}}
427
+ page {"kind":"page","input":<query>,"pageSize":${CLI_LIMITS.list.default},"pageToken":"from nextPageToken"}
428
+ project {"kind":"project","input":<query>,"properties":["name","status"]}
429
+ expand {"kind":"expand","input":<query>,"expansions":[{"linkId":"link","direction":"outgoing","limit":5}]}
430
+ vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
431
+ rerank {"kind":"rerank","input":<vector>,"model":{"provider":"provider","modelId":"model"}}
398
432
 
399
433
  Predicates use op, not kind:
400
- and/or, not, {"op":"eq","propertyId":"status","value":"open"}, neq, lt, lte, gt, gte,
401
- in, exists, and contains.
434
+ {"op":"and","items":[<predicate>,<predicate>]} or: same shape
435
+ {"op":"not","item":<predicate>}
436
+ {"op":"eq","propertyId":"status","value":"open"} neq, lt, lte, gt, gte: same shape
437
+ {"op":"in","propertyId":"status","values":["open","blocked"]}
438
+ {"op":"exists","propertyId":"dueDate","value":true}
439
+ {"op":"contains","propertyId":"tags","value":"urgent"}
440
+
441
+ Every field shown is required except includeSubtypes, fields, pageToken, properties, a sort
442
+ direction, and an expansion's limit. Sort by relevance after text or vector with
443
+ {"kind":"relevance"}. Wrap the outermost node in project to return only the properties you need.
402
444
 
403
445
  Traversal and expansion directions are outgoing or incoming. For incoming relationships, the link
404
446
  is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
405
447
 
406
- 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.`;
448
+ Never guess property or link ids: run \`sixb ontology get <type>\` (in the agent sandbox, read
449
+ the type's file under $SIXB_ONTOLOGY_DIR). Use refs for exact
450
+ identities. Put limits and pages inside the query tree.
451
+
452
+ Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
453
+ optionally under filters; k bounds the ranked matches and results carry a score.`;
408
454
  var GROUP_HELP = {
409
455
  doctor: "Usage: sixb doctor",
410
456
  context: "Usage: sixb context",
@@ -468,10 +514,16 @@ List options:
468
514
  var QUERY_EXAMPLES = {
469
515
  exact: '{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]}',
470
516
  filter: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"limit":${CLI_LIMITS.list.default}}`,
517
+ and: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"and","items":[{"op":"eq","propertyId":"status","value":"active"},{"op":"gte","propertyId":"createdAt","value":"2026-01-01T00:00:00Z"}]}},"limit":${CLI_LIMITS.list.default}}`,
518
+ not: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"not","item":{"op":"eq","propertyId":"status","value":"churned"}}},"limit":${CLI_LIMITS.list.default}}`,
519
+ in: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"in","propertyId":"status","values":["active","trial"]}},"limit":${CLI_LIMITS.list.default}}`,
520
+ exists: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"exists","propertyId":"accountManager","value":false}},"limit":${CLI_LIMITS.list.default}}`,
521
+ project: `{"kind":"project","input":{"kind":"limit","input":{"kind":"start","objectTypeId":"Customer"},"limit":${CLI_LIMITS.list.default}},"properties":["name","status"]}`,
471
522
  incoming: '{"kind":"traverse","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment"}',
472
523
  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
524
  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}}`
525
+ page: `{"kind":"page","input":{"kind":"start","objectTypeId":"Customer"},"pageSize":${CLI_LIMITS.list.default}}`,
526
+ 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
527
  };
476
528
  var FACETS_EXAMPLE = '{"query":{"kind":"start","objectTypeId":"WorkOrder"},"facets":[{"propertyId":"status","limit":10}]}';
477
529
 
@@ -526,6 +578,9 @@ function asRecord2(value) {
526
578
  function asRecords(value) {
527
579
  return Array.isArray(value) ? value.map(asRecord2) : [];
528
580
  }
581
+ function vectorProfileNames(objectType) {
582
+ return Object.keys(asRecord2(asRecord2(objectType.search).vectors));
583
+ }
529
584
  function isFileError(error, code) {
530
585
  return error instanceof Error && "code" in error && error.code === code;
531
586
  }
@@ -1012,12 +1067,48 @@ async function objectsGet(api, args) {
1012
1067
  }));
1013
1068
  }
1014
1069
  async function objectsSearch(api, args) {
1015
- if (requestsHelp(args)) {
1016
- return writeText(`Usage: sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]`);
1070
+ if (requestsHelp(args))
1071
+ return writeText(SEARCH_HELP);
1072
+ const { positionals, options } = parseCommandArgs(args, { "--limit": "string", "--type": "string", "--vector-profile": "string" }, "objects search", 1);
1073
+ const text = positionals[0] ?? "";
1074
+ const limit = integerInRange("--limit", options["--limit"] ?? String(CLI_LIMITS.search.default), 1, CLI_LIMITS.search.maximum);
1075
+ const objectTypeId = options["--type"];
1076
+ if (!objectTypeId) {
1077
+ if (options["--vector-profile"])
1078
+ fail("--vector-profile requires --type.");
1079
+ return writeJson(await api.get("/api/objects/search", { q: text, limit: String(limit) }));
1080
+ }
1081
+ if (!text.trim() || text.length > CLI_LIMITS.vectorSearchText.maximum) {
1082
+ fail(`Semantic search text must be nonempty and at most ${CLI_LIMITS.vectorSearchText.maximum} characters.`);
1083
+ }
1084
+ const objectType = asRecord2(await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`));
1085
+ const profile = selectVectorProfile(objectTypeId, objectType, options["--vector-profile"]);
1086
+ writeJson(await api.post("/api/objects/query", {
1087
+ query: {
1088
+ kind: "vector",
1089
+ input: { kind: "start", objectTypeId },
1090
+ vector: text,
1091
+ profile,
1092
+ k: limit
1093
+ },
1094
+ includeTotal: false
1095
+ }));
1096
+ }
1097
+ function selectVectorProfile(objectTypeId, objectType, requested) {
1098
+ const profiles = vectorProfileNames(objectType);
1099
+ if (profiles.length === 0) {
1100
+ fail(`${objectTypeId} has no vector search profile.`, "invalid_arguments", "Omit --type for identifier and full-text search.");
1101
+ }
1102
+ if (requested !== undefined) {
1103
+ if (!profiles.includes(requested)) {
1104
+ fail(`${objectTypeId} has no vector profile '${requested}'. Use ${profiles.join(", ")}.`);
1105
+ }
1106
+ return requested;
1107
+ }
1108
+ if (profiles.length > 1) {
1109
+ fail(`${objectTypeId} has vector profiles ${profiles.join(", ")}. Pass --vector-profile <name>.`);
1017
1110
  }
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 }));
1111
+ return profiles[0] ?? "";
1021
1112
  }
1022
1113
  async function objectsQuery(api, args) {
1023
1114
  if (requestsHelp(args))
@@ -1129,11 +1220,13 @@ async function ontology(api, args) {
1129
1220
  return writeJson(value.map((entry) => {
1130
1221
  const type = asRecord2(entry);
1131
1222
  const properties = asRecords(type.properties);
1223
+ const vectorProfiles = vectorProfileNames(type);
1132
1224
  return {
1133
1225
  id: type.id,
1134
1226
  name: type.name,
1135
1227
  description: type.description,
1136
1228
  primaryPropertyId: properties.find((property) => property.primary === true)?.id,
1229
+ ...vectorProfiles.length === 0 ? {} : { vectorProfiles },
1137
1230
  links: asRecords(type.links).map(({ id, name, description, targetObjectTypeId, cardinality }) => ({
1138
1231
  id,
1139
1232
  name,
@@ -1397,4 +1490,4 @@ export {
1397
1490
  writeText
1398
1491
  };
1399
1492
 
1400
- //# debugId=E2063576ABB52F9464756E2164756E21
1493
+ //# debugId=F1EB880C95B058F464756E2164756E21
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\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\n\\`sixb ontology get\\` for a type that has no file there.\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 .replace(\n \"\\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\\n`sixb ontology get` for a type that has no file there.\\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 <name>\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 set {\"kind\":\"set\",\"op\":\"union\",\"inputs\":[<query>,<query>]} op: union, intersect, subtract\n sort {\"kind\":\"sort\",\"input\":<query>,\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]}\n limit {\"kind\":\"limit\",\"input\":<query>,\"limit\":${CLI_LIMITS.list.default}}\n page {\"kind\":\"page\",\"input\":<query>,\"pageSize\":${CLI_LIMITS.list.default},\"pageToken\":\"from nextPageToken\"}\n project {\"kind\":\"project\",\"input\":<query>,\"properties\":[\"name\",\"status\"]}\n expand {\"kind\":\"expand\",\"input\":<query>,\"expansions\":[{\"linkId\":\"link\",\"direction\":\"outgoing\",\"limit\":5}]}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n rerank {\"kind\":\"rerank\",\"input\":<vector>,\"model\":{\"provider\":\"provider\",\"modelId\":\"model\"}}\n\nPredicates use op, not kind:\n {\"op\":\"and\",\"items\":[<predicate>,<predicate>]} or: same shape\n {\"op\":\"not\",\"item\":<predicate>}\n {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"} neq, lt, lte, gt, gte: same shape\n {\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"open\",\"blocked\"]}\n {\"op\":\"exists\",\"propertyId\":\"dueDate\",\"value\":true}\n {\"op\":\"contains\",\"propertyId\":\"tags\",\"value\":\"urgent\"}\n\nEvery field shown is required except includeSubtypes, fields, pageToken, properties, a sort\ndirection, and an expansion's limit. Sort by relevance after text or vector with\n{\"kind\":\"relevance\"}. Wrap the outermost node in project to return only the properties you need.\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\nNever guess property or link ids: run \\`sixb ontology get <type>\\` (in the agent sandbox, read\nthe type's file under $SIXB_ONTOLOGY_DIR). 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 and: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"and\",\"items\":[{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"},{\"op\":\"gte\",\"propertyId\":\"createdAt\",\"value\":\"2026-01-01T00:00:00Z\"}]}},\"limit\":${CLI_LIMITS.list.default}}`,\n not: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"not\",\"item\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"churned\"}}},\"limit\":${CLI_LIMITS.list.default}}`,\n in: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"active\",\"trial\"]}},\"limit\":${CLI_LIMITS.list.default}}`,\n exists: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"exists\",\"propertyId\":\"accountManager\",\"value\":false}},\"limit\":${CLI_LIMITS.list.default}}`,\n project: `{\"kind\":\"project\",\"input\":{\"kind\":\"limit\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"limit\":${CLI_LIMITS.list.default}},\"properties\":[\"name\",\"status\"]}`,\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": "E2063576ABB52F9464756E2164756E21",
23
+ "mappings": "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",
24
+ "debugId": "F1EB880C95B058F464756E2164756E21",
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.5",
3
+ "version": "0.1.7",
4
4
  "description": "Shared instance command runtime for Sixb CLIs",
5
5
  "keywords": [
6
6
  "sixb",
@@ -21,11 +21,16 @@ Discovery:
21
21
  sixb ontology list Compact visible type and relationship catalog
22
22
  sixb ontology get <type> Inspect one object type, properties, links, and actions
23
23
 
24
+ When you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use
25
+ \`sixb ontology get\` for a type that has no file there.
26
+
24
27
  Objects:
25
28
  sixb objects inspect <type> <id> Inspect an object and its related graph in one command
26
29
  sixb objects list [options] Browse materialized objects
27
30
  sixb objects get <type> <id>... Exact lookup through opaque object references
28
- sixb objects search <text> Search visible objects
31
+ sixb objects search <text> Search visible objects by id prefix and full text
32
+ sixb objects search <text> --type <type>
33
+ Semantic search through the type's vector profile
29
34
  sixb objects query --file <file|-> Execute query IR from JSON
30
35
  sixb objects count --file <file|-> Count a query without returning rows
31
36
  sixb objects exists --file <file|-> Test whether a query has a match
@@ -58,16 +63,35 @@ const LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace("Sixb agent CLI", "Sixb instan
58
63
  " sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n",
59
64
  ""
60
65
  )
66
+ .replace(
67
+ "\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\n`sixb ontology get` for a type that has no file there.\n",
68
+ ""
69
+ )
61
70
 
62
71
  export function renderInstanceHelp(mode: "local" | "sandbox"): string {
63
72
  return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP
64
73
  }
65
74
 
75
+ const SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.
76
+ With --type, the server embeds the text with the profile's model and ranks results by score,
77
+ a cosine similarity where higher is closer. \`sixb ontology list\` shows each type's
78
+ vectorProfiles. To combine semantic search with filters, run
79
+ \`sixb objects query --example vector\`.`
80
+
81
+ export const SEARCH_HELP = `Usage:
82
+ sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
83
+ sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]
84
+
85
+ --limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several
86
+ profiles.
87
+
88
+ ${SEARCH_DETAILS}`
89
+
66
90
  export const OBJECTS_HELP = `Usage:
67
91
  sixb objects inspect <object-type> <primary-id> [options]
68
92
  sixb objects list [options]
69
93
  sixb objects get <object-type> <primary-id>...
70
- sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]
94
+ sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]
71
95
  sixb objects query --file <path|-> [--include-total|--no-total]
72
96
  sixb objects query --example <name>
73
97
  sixb objects count --file <path|->
@@ -87,6 +111,11 @@ List options:
87
111
  --created-after|--created-before <RFC3339>
88
112
  --updated-after|--updated-before <RFC3339>
89
113
 
114
+ Search options:
115
+ --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}
116
+ --type <id> Semantic search through this type's vector profile
117
+ --vector-profile <name> Required when the type declares several profiles
118
+
90
119
  Links options:
91
120
  --link <link-id>
92
121
  --direction outgoing|incoming|both Defaults to both
@@ -106,14 +135,14 @@ default and returns a bounded graph.
106
135
  Inspect omits materialization timestamps and ontology definitions by default. Use \`--full\` when
107
136
  storage timestamps, declared links, or available actions are needed.
108
137
 
109
- Search returns at most ${CLI_LIMITS.search.maximum} matches and defaults to ${CLI_LIMITS.search.default}.
138
+ ${SEARCH_DETAILS}
110
139
 
111
140
  \`objects get\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or
112
141
  % are safe. Identifiers are case-sensitive.`
113
142
 
114
143
  export const QUERY_HELP = `Usage:
115
144
  sixb objects query --file <path|-> [--include-total|--no-total]
116
- sixb objects query --example <exact|filter|incoming|expand|sort|page>
145
+ sixb objects query --example <name>
117
146
  sixb objects query --example list
118
147
 
119
148
  Input is a query node. A full {"query": ...} request is also accepted.
@@ -124,17 +153,36 @@ Query nodes compose through input:
124
153
  filter {"kind":"filter","input":<query>,"predicate":<predicate>}
125
154
  text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
126
155
  traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
127
- vector, set, sort, limit, page, project, and expand are also supported.
156
+ set {"kind":"set","op":"union","inputs":[<query>,<query>]} op: union, intersect, subtract
157
+ sort {"kind":"sort","input":<query>,"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]}
158
+ limit {"kind":"limit","input":<query>,"limit":${CLI_LIMITS.list.default}}
159
+ page {"kind":"page","input":<query>,"pageSize":${CLI_LIMITS.list.default},"pageToken":"from nextPageToken"}
160
+ project {"kind":"project","input":<query>,"properties":["name","status"]}
161
+ expand {"kind":"expand","input":<query>,"expansions":[{"linkId":"link","direction":"outgoing","limit":5}]}
162
+ vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
163
+ rerank {"kind":"rerank","input":<vector>,"model":{"provider":"provider","modelId":"model"}}
128
164
 
129
165
  Predicates use op, not kind:
130
- and/or, not, {"op":"eq","propertyId":"status","value":"open"}, neq, lt, lte, gt, gte,
131
- in, exists, and contains.
166
+ {"op":"and","items":[<predicate>,<predicate>]} or: same shape
167
+ {"op":"not","item":<predicate>}
168
+ {"op":"eq","propertyId":"status","value":"open"} neq, lt, lte, gt, gte: same shape
169
+ {"op":"in","propertyId":"status","values":["open","blocked"]}
170
+ {"op":"exists","propertyId":"dueDate","value":true}
171
+ {"op":"contains","propertyId":"tags","value":"urgent"}
172
+
173
+ Every field shown is required except includeSubtypes, fields, pageToken, properties, a sort
174
+ direction, and an expansion's limit. Sort by relevance after text or vector with
175
+ {"kind":"relevance"}. Wrap the outermost node in project to return only the properties you need.
132
176
 
133
177
  Traversal and expansion directions are outgoing or incoming. For incoming relationships, the link
134
178
  is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
135
179
 
136
- 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.`
180
+ Never guess property or link ids: run \`sixb ontology get <type>\` (in the agent sandbox, read
181
+ the type's file under $SIXB_ONTOLOGY_DIR). Use refs for exact
182
+ identities. Put limits and pages inside the query tree.
183
+
184
+ Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
185
+ optionally under filters; k bounds the ranked matches and results carry a score.`
138
186
 
139
187
  export const GROUP_HELP = {
140
188
  doctor: "Usage: sixb doctor",
@@ -201,11 +249,17 @@ export const QUERY_EXAMPLES: Readonly<Record<string, string>> = {
201
249
  exact:
202
250
  '{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]}',
203
251
  filter: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"limit":${CLI_LIMITS.list.default}}`,
252
+ and: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"and","items":[{"op":"eq","propertyId":"status","value":"active"},{"op":"gte","propertyId":"createdAt","value":"2026-01-01T00:00:00Z"}]}},"limit":${CLI_LIMITS.list.default}}`,
253
+ not: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"not","item":{"op":"eq","propertyId":"status","value":"churned"}}},"limit":${CLI_LIMITS.list.default}}`,
254
+ in: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"in","propertyId":"status","values":["active","trial"]}},"limit":${CLI_LIMITS.list.default}}`,
255
+ exists: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"exists","propertyId":"accountManager","value":false}},"limit":${CLI_LIMITS.list.default}}`,
256
+ project: `{"kind":"project","input":{"kind":"limit","input":{"kind":"start","objectTypeId":"Customer"},"limit":${CLI_LIMITS.list.default}},"properties":["name","status"]}`,
204
257
  incoming:
205
258
  '{"kind":"traverse","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment"}',
206
259
  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
260
  sort: `{"kind":"limit","input":{"kind":"sort","input":{"kind":"start","objectTypeId":"Customer"},"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]},"limit":${CLI_LIMITS.list.default}}`,
208
261
  page: `{"kind":"page","input":{"kind":"start","objectTypeId":"Customer"},"pageSize":${CLI_LIMITS.list.default}}`,
262
+ 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
263
  }
210
264
 
211
265
  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: {