@sixb/cli-core 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +4 -1
- package/dist/api-client.d.ts.map +1 -1
- package/dist/commands/actions.d.ts +3 -1
- package/dist/commands/actions.d.ts.map +1 -1
- package/dist/commands/metadata.d.ts +3 -3
- package/dist/commands/metadata.d.ts.map +1 -1
- package/dist/index.js +66 -48
- package/dist/index.js.map +8 -8
- package/package.json +1 -1
- package/src/api-client.ts +9 -2
- package/src/arguments.ts +1 -0
- package/src/commands/actions.ts +42 -40
- package/src/commands/metadata.ts +37 -9
- package/src/commands/runs.ts +1 -1
package/dist/api-client.d.ts
CHANGED
|
@@ -6,7 +6,10 @@ export declare class ApiClient {
|
|
|
6
6
|
private readonly unavailableHint;
|
|
7
7
|
constructor(options: ApiClientOptions);
|
|
8
8
|
get(path: string, query?: Readonly<Record<string, string | undefined>>): Promise<unknown>;
|
|
9
|
-
|
|
9
|
+
/** `signal` stops waiting for the response; the abort is rethrown as it was raised. */
|
|
10
|
+
post(path: string, body: unknown, options?: {
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
}): Promise<unknown>;
|
|
10
13
|
upload(path: string, source: string, logicalPath?: string): Promise<unknown>;
|
|
11
14
|
download(path: string, output: string, query?: Readonly<Record<string, string | undefined>>): Promise<void>;
|
|
12
15
|
private url;
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AASA,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAE5B,OAAO,EAAE,gBAAgB;IAQ/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AASA,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAE5B,OAAO,EAAE,gBAAgB;IAQ/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/F,uFAAuF;IACjF,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAC9C,OAAO,CAAC,OAAO,CAAC;IASb,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5E,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAehB,OAAO,CAAC,GAAG;YAUG,IAAI;YAcJ,KAAK;CAqDpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { ApiClient } from "../api-client";
|
|
2
|
-
export declare function actions(api: ApiClient, args: readonly string[]
|
|
2
|
+
export declare function actions(api: ApiClient, args: readonly string[],
|
|
3
|
+
/** Test-only override of {@link ACTION_REQUEST_WAIT_MS}. */
|
|
4
|
+
requestWaitMs?: number): Promise<void>;
|
|
3
5
|
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/commands/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/commands/actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAa9C,wBAAsB,OAAO,CAC3B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,SAAS,MAAM,EAAE;AACvB,4DAA4D;AAC5D,aAAa,SAAyB,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export declare function renderInstanceHelp(mode: "local" | "sandbox"): string;
|
|
2
2
|
export declare const SEARCH_HELP: string;
|
|
3
3
|
export declare const OBJECTS_HELP: string;
|
|
4
|
-
export declare const QUERY_HELP
|
|
4
|
+
export declare const QUERY_HELP: string;
|
|
5
5
|
export declare const GROUP_HELP: {
|
|
6
6
|
readonly doctor: "Usage: sixb doctor";
|
|
7
7
|
readonly context: "Usage: sixb context";
|
|
8
8
|
readonly project: "Usage: sixb project show";
|
|
9
9
|
readonly ontology: "Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>";
|
|
10
10
|
readonly 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-1000> Defaults to 100\n --order <asc|desc> Timestamp order; defaults to desc";
|
|
11
|
-
readonly 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>]
|
|
12
|
-
readonly "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
|
|
11
|
+
readonly 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>]\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. `actions request` runs the Action\nand prints its finished run, with its status and any error. It waits at most 25 seconds: a run that\ntakes longer keeps running, and the error names the run to read with `action-runs get`.";
|
|
12
|
+
readonly "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 succeeded|failed\n --started-after|--started-before <RFC3339>\n --limit <1-1000> Defaults to 20\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to desc";
|
|
13
13
|
readonly 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>";
|
|
14
14
|
readonly 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.";
|
|
15
15
|
readonly "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-1000> Defaults to 20\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to desc";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/commands/metadata.ts"],"names":[],"mappings":"
|
|
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;;;;;;;;;;;CA4Db,CAAA;AAEV,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3D,CAAA;AAED,eAAO,MAAM,cAAc,0HAC4E,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -62,11 +62,12 @@ class ApiClient {
|
|
|
62
62
|
const url = this.url(path, query);
|
|
63
63
|
return this.json(url, { method: "GET" });
|
|
64
64
|
}
|
|
65
|
-
async post(path, body) {
|
|
65
|
+
async post(path, body, options = {}) {
|
|
66
66
|
return this.json(this.url(path), {
|
|
67
67
|
method: "POST",
|
|
68
68
|
headers: { "content-type": "application/json" },
|
|
69
|
-
body: JSON.stringify(body)
|
|
69
|
+
body: JSON.stringify(body),
|
|
70
|
+
...options.signal ? { signal: options.signal } : {}
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
73
|
async upload(path, source, logicalPath) {
|
|
@@ -117,7 +118,9 @@ class ApiClient {
|
|
|
117
118
|
if (this.authorization)
|
|
118
119
|
headers.set("authorization", this.authorization);
|
|
119
120
|
response = await fetch(url, { ...init, headers });
|
|
120
|
-
} catch {
|
|
121
|
+
} catch (error) {
|
|
122
|
+
if (init.signal?.aborted)
|
|
123
|
+
throw error;
|
|
121
124
|
throw new CliError({
|
|
122
125
|
code: "api_unreachable",
|
|
123
126
|
message: this.unavailableMessage,
|
|
@@ -265,8 +268,13 @@ function enumValue(flag, value, allowed) {
|
|
|
265
268
|
function formatAlternatives(values) {
|
|
266
269
|
if (values.length < 2)
|
|
267
270
|
return values[0] ?? "a supported value";
|
|
271
|
+
if (values.length === 2)
|
|
272
|
+
return `${values[0]} or ${values[1]}`;
|
|
268
273
|
return `${values.slice(0, -1).join(", ")}, or ${values.at(-1)}`;
|
|
269
274
|
}
|
|
275
|
+
// src/commands/actions.ts
|
|
276
|
+
import { randomUUID as randomUUID2 } from "crypto";
|
|
277
|
+
|
|
270
278
|
// src/policies.ts
|
|
271
279
|
var CLI_LIMITS = {
|
|
272
280
|
list: { default: 20, maximum: 1000 },
|
|
@@ -302,6 +310,9 @@ Discovery:
|
|
|
302
310
|
sixb ontology list Compact visible type and relationship catalog
|
|
303
311
|
sixb ontology get <type> Inspect one object type, properties, links, and actions
|
|
304
312
|
|
|
313
|
+
When you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use
|
|
314
|
+
\`sixb ontology get\` for a type that has no file there.
|
|
315
|
+
|
|
305
316
|
Objects:
|
|
306
317
|
sixb objects inspect <type> <id> Inspect an object and its related graph in one command
|
|
307
318
|
sixb objects list [options] Browse materialized objects
|
|
@@ -333,6 +344,9 @@ Run \`sixb <group> --help\` or \`sixb <group> <command> --help\` for exact argum
|
|
|
333
344
|
For query IR, run \`sixb objects query --help\` and \`sixb objects query --example list\`.`;
|
|
334
345
|
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
|
|
335
346
|
sixb context Print the current run context
|
|
347
|
+
`, "").replace(`
|
|
348
|
+
When you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use
|
|
349
|
+
\`sixb ontology get\` for a type that has no file there.
|
|
336
350
|
`, "");
|
|
337
351
|
function renderInstanceHelp(mode) {
|
|
338
352
|
return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP;
|
|
@@ -404,7 +418,7 @@ ${SEARCH_DETAILS}
|
|
|
404
418
|
% are safe. Identifiers are case-sensitive.`;
|
|
405
419
|
var QUERY_HELP = `Usage:
|
|
406
420
|
sixb objects query --file <path|-> [--include-total|--no-total]
|
|
407
|
-
sixb objects query --example <
|
|
421
|
+
sixb objects query --example <name>
|
|
408
422
|
sixb objects query --example list
|
|
409
423
|
|
|
410
424
|
Input is a query node. A full {"query": ...} request is also accepted.
|
|
@@ -415,17 +429,32 @@ Query nodes compose through input:
|
|
|
415
429
|
filter {"kind":"filter","input":<query>,"predicate":<predicate>}
|
|
416
430
|
text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
|
|
417
431
|
traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
|
|
432
|
+
set {"kind":"set","op":"union","inputs":[<query>,<query>]} op: union, intersect, subtract
|
|
433
|
+
sort {"kind":"sort","input":<query>,"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]}
|
|
434
|
+
limit {"kind":"limit","input":<query>,"limit":${CLI_LIMITS.list.default}}
|
|
435
|
+
page {"kind":"page","input":<query>,"pageSize":${CLI_LIMITS.list.default},"pageToken":"from nextPageToken"}
|
|
436
|
+
project {"kind":"project","input":<query>,"properties":["name","status"]}
|
|
437
|
+
expand {"kind":"expand","input":<query>,"expansions":[{"linkId":"link","direction":"outgoing","limit":5}]}
|
|
418
438
|
vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
|
|
419
|
-
|
|
439
|
+
rerank {"kind":"rerank","input":<vector>,"model":{"provider":"provider","modelId":"model"}}
|
|
420
440
|
|
|
421
441
|
Predicates use op, not kind:
|
|
422
|
-
|
|
423
|
-
|
|
442
|
+
{"op":"and","items":[<predicate>,<predicate>]} or: same shape
|
|
443
|
+
{"op":"not","item":<predicate>}
|
|
444
|
+
{"op":"eq","propertyId":"status","value":"open"} neq, lt, lte, gt, gte: same shape
|
|
445
|
+
{"op":"in","propertyId":"status","values":["open","blocked"]}
|
|
446
|
+
{"op":"exists","propertyId":"dueDate","value":true}
|
|
447
|
+
{"op":"contains","propertyId":"tags","value":"urgent"}
|
|
448
|
+
|
|
449
|
+
Every field shown is required except includeSubtypes, fields, pageToken, properties, a sort
|
|
450
|
+
direction, and an expansion's limit. Sort by relevance after text or vector with
|
|
451
|
+
{"kind":"relevance"}. Wrap the outermost node in project to return only the properties you need.
|
|
424
452
|
|
|
425
453
|
Traversal and expansion directions are outgoing or incoming. For incoming relationships, the link
|
|
426
454
|
is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
|
|
427
455
|
|
|
428
|
-
|
|
456
|
+
Never guess property or link ids: run \`sixb ontology get <type>\` (in the agent sandbox, read
|
|
457
|
+
the type's file under $SIXB_ONTOLOGY_DIR). Use refs for exact
|
|
429
458
|
identities. Put limits and pages inside the query tree.
|
|
430
459
|
|
|
431
460
|
Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
|
|
@@ -450,11 +479,12 @@ History options:
|
|
|
450
479
|
actions: `Usage:
|
|
451
480
|
sixb actions list [--type <object-type>]
|
|
452
481
|
sixb actions get <action-id>
|
|
453
|
-
sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
|
|
482
|
+
sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
|
|
454
483
|
|
|
455
484
|
\`actions get\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file
|
|
456
|
-
contains that parameter object; use - to read standard input.
|
|
457
|
-
run and waits at most 25 seconds
|
|
485
|
+
contains that parameter object; use - to read standard input. \`actions request\` runs the Action
|
|
486
|
+
and prints its finished run, with its status and any error. It waits at most 25 seconds: a run that
|
|
487
|
+
takes longer keeps running, and the error names the run to read with \`action-runs get\`.`,
|
|
458
488
|
"action-runs": `Usage:
|
|
459
489
|
sixb action-runs list [options]
|
|
460
490
|
sixb action-runs get <run-id>
|
|
@@ -463,7 +493,7 @@ List options:
|
|
|
463
493
|
--action <action-id>
|
|
464
494
|
--type <object-type>
|
|
465
495
|
--id <primary-id>
|
|
466
|
-
--status
|
|
496
|
+
--status succeeded|failed
|
|
467
497
|
--started-after|--started-before <RFC3339>
|
|
468
498
|
--limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}
|
|
469
499
|
--offset <n> Non-negative; defaults to 0
|
|
@@ -493,6 +523,11 @@ List options:
|
|
|
493
523
|
var QUERY_EXAMPLES = {
|
|
494
524
|
exact: '{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]}',
|
|
495
525
|
filter: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"limit":${CLI_LIMITS.list.default}}`,
|
|
526
|
+
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}}`,
|
|
527
|
+
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}}`,
|
|
528
|
+
in: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"in","propertyId":"status","values":["active","trial"]}},"limit":${CLI_LIMITS.list.default}}`,
|
|
529
|
+
exists: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"exists","propertyId":"accountManager","value":false}},"limit":${CLI_LIMITS.list.default}}`,
|
|
530
|
+
project: `{"kind":"project","input":{"kind":"limit","input":{"kind":"start","objectTypeId":"Customer"},"limit":${CLI_LIMITS.list.default}},"properties":["name","status"]}`,
|
|
496
531
|
incoming: '{"kind":"traverse","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment"}',
|
|
497
532
|
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}}]}`,
|
|
498
533
|
sort: `{"kind":"limit","input":{"kind":"sort","input":{"kind":"start","objectTypeId":"Customer"},"fields":[{"kind":"property","propertyId":"name","direction":"asc"}]},"limit":${CLI_LIMITS.list.default}}`,
|
|
@@ -567,7 +602,8 @@ async function readStdin() {
|
|
|
567
602
|
}
|
|
568
603
|
|
|
569
604
|
// src/commands/actions.ts
|
|
570
|
-
|
|
605
|
+
var ACTION_REQUEST_WAIT_MS = 25000;
|
|
606
|
+
async function actions(api, args, requestWaitMs = ACTION_REQUEST_WAIT_MS) {
|
|
571
607
|
const [sub, ...rest] = args;
|
|
572
608
|
if (!sub || isHelp(sub) || requestsHelp(rest))
|
|
573
609
|
return writeText(GROUP_HELP.actions);
|
|
@@ -589,15 +625,13 @@ async function actions(api, args) {
|
|
|
589
625
|
"--subject-type": "string",
|
|
590
626
|
"--subject-id": "string",
|
|
591
627
|
"--file": "string",
|
|
592
|
-
"--run-id": "string"
|
|
593
|
-
"--wait": "boolean"
|
|
628
|
+
"--run-id": "string"
|
|
594
629
|
}, "actions request", 1);
|
|
595
630
|
const actionId = positionals[0] ?? "";
|
|
596
631
|
const subjectType = options["--subject-type"];
|
|
597
632
|
const subjectId = options["--subject-id"];
|
|
598
633
|
const paramsSource = options["--file"];
|
|
599
634
|
const runId = options["--run-id"];
|
|
600
|
-
const wait = options["--wait"];
|
|
601
635
|
if (Boolean(subjectType) !== Boolean(subjectId)) {
|
|
602
636
|
fail("--subject-type and --subject-id must be provided together.");
|
|
603
637
|
}
|
|
@@ -605,42 +639,26 @@ async function actions(api, args) {
|
|
|
605
639
|
if (Array.isArray(params) || typeof params !== "object" || params === null) {
|
|
606
640
|
fail("Action params must be a JSON object.");
|
|
607
641
|
}
|
|
608
|
-
const
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
642
|
+
const requestedRunId = runId ?? `act_${randomUUID2()}`;
|
|
643
|
+
const waiting = AbortSignal.timeout(requestWaitMs);
|
|
644
|
+
try {
|
|
645
|
+
return writeJson(await api.post(`/api/actions/${encodeURIComponent(actionId)}`, {
|
|
646
|
+
params,
|
|
647
|
+
...subjectType && subjectId ? { subject: { kind: "object", objectTypeId: subjectType, primaryId: subjectId } } : {},
|
|
648
|
+
runId: requestedRunId
|
|
649
|
+
}, { signal: waiting }));
|
|
650
|
+
} catch (error) {
|
|
651
|
+
if (!waiting.aborted)
|
|
652
|
+
throw error;
|
|
617
653
|
throw new CliError({
|
|
618
|
-
code: "
|
|
619
|
-
message:
|
|
654
|
+
code: "action_wait_timeout",
|
|
655
|
+
message: `Action run '${requestedRunId}' did not finish within ${requestWaitMs / 1000} ` + "seconds. It was not cancelled.",
|
|
656
|
+
hint: `Read it with 'sixb action-runs get ${requestedRunId}': its record exists once it ` + `has ended. A repeated request must pass '--run-id ${requestedRunId}', or the ` + "Action runs twice."
|
|
620
657
|
}, EXIT_API);
|
|
621
658
|
}
|
|
622
|
-
return writeJson(await waitForActionRun(api, requestedRunId));
|
|
623
659
|
}
|
|
624
660
|
fail(`Unknown actions command '${sub}'.`);
|
|
625
661
|
}
|
|
626
|
-
var ACTION_WAIT_TIMEOUT_MS = 25000;
|
|
627
|
-
var ACTION_WAIT_POLL_MS = 250;
|
|
628
|
-
var TERMINAL_ACTION_STATUSES = new Set(["succeeded", "failed", "cancelled"]);
|
|
629
|
-
async function waitForActionRun(api, runId) {
|
|
630
|
-
const startedAt = Date.now();
|
|
631
|
-
while (Date.now() - startedAt < ACTION_WAIT_TIMEOUT_MS) {
|
|
632
|
-
const run = await api.get(`/api/action-runs/${encodeURIComponent(runId)}`);
|
|
633
|
-
const status = asRecord2(run).status;
|
|
634
|
-
if (typeof status === "string" && TERMINAL_ACTION_STATUSES.has(status))
|
|
635
|
-
return run;
|
|
636
|
-
await new Promise((resolve) => setTimeout(resolve, ACTION_WAIT_POLL_MS));
|
|
637
|
-
}
|
|
638
|
-
throw new CliError({
|
|
639
|
-
code: "action_wait_timeout",
|
|
640
|
-
message: `Action run '${runId}' did not finish within ${ACTION_WAIT_TIMEOUT_MS / 1000} seconds.`,
|
|
641
|
-
hint: `Inspect it with 'sixb action-runs get ${runId}'.`
|
|
642
|
-
}, EXIT_API);
|
|
643
|
-
}
|
|
644
662
|
|
|
645
663
|
// src/commands/files.ts
|
|
646
664
|
import { access } from "fs/promises";
|
|
@@ -1237,7 +1255,7 @@ async function project(api, args) {
|
|
|
1237
1255
|
}
|
|
1238
1256
|
|
|
1239
1257
|
// src/commands/runs.ts
|
|
1240
|
-
var ACTION_RUN_STATUSES = ["
|
|
1258
|
+
var ACTION_RUN_STATUSES = ["succeeded", "failed"];
|
|
1241
1259
|
var WORKFLOW_RUN_STATUSES = [
|
|
1242
1260
|
"queued",
|
|
1243
1261
|
"running",
|
|
@@ -1464,4 +1482,4 @@ export {
|
|
|
1464
1482
|
writeText
|
|
1465
1483
|
};
|
|
1466
1484
|
|
|
1467
|
-
//# debugId=
|
|
1485
|
+
//# debugId=D8A3DF8338E3251F64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/api-client.ts", "../src/output.ts", "../src/arguments.ts", "../src/
|
|
3
|
+
"sources": ["../src/api-client.ts", "../src/output.ts", "../src/arguments.ts", "../src/commands/actions.ts", "../src/policies.ts", "../src/commands/metadata.ts", "../src/commands/shared.ts", "../src/commands/files.ts", "../src/graph.ts", "../src/commands/objects.ts", "../src/commands/ontology.ts", "../src/commands/project.ts", "../src/commands/runs.ts", "../src/commands/telemetry.ts", "../src/commands/workflows.ts", "../src/commands/index.ts", "../src/run.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
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
|
|
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 /** `signal` stops waiting for the response; the abort is rethrown as it was raised. */\n async post(\n path: string,\n body: unknown,\n options: { readonly signal?: AbortSignal } = {}\n ): Promise<unknown> {\n return this.json(this.url(path), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n ...(options.signal ? { signal: options.signal } : {}),\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 (error) {\n if (init.signal?.aborted) throw error\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
|
-
"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",
|
|
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 if (values.length === 2) return `${values[0]} or ${values[1]}`\n return `${values.slice(0, -1).join(\", \")}, or ${values.at(-1)}`\n}\n",
|
|
8
|
+
"import { randomUUID } from \"node:crypto\"\nimport 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\n/**\n * How long `actions request` waits for the run it requested. An agent's command is killed after 30\n * seconds, which is also how long an Action has to reach its boundary: stopping first leaves the\n * agent with the run id, instead of a dead command and a request it can only repeat.\n */\nconst ACTION_REQUEST_WAIT_MS = 25_000\n\nexport async function actions(\n api: ApiClient,\n args: readonly string[],\n /** Test-only override of {@link ACTION_REQUEST_WAIT_MS}. */\n requestWaitMs = ACTION_REQUEST_WAIT_MS\n): 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 },\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 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 // The API answers once the Action has run, with its terminal run. Every request names its run,\n // so that one this command stops waiting for can still be read: the run is not cancelled.\n const requestedRunId = runId ?? `act_${randomUUID()}`\n const waiting = AbortSignal.timeout(requestWaitMs)\n try {\n return writeJson(\n await api.post(\n `/api/actions/${encodeURIComponent(actionId)}`,\n {\n params,\n ...(subjectType && subjectId\n ? { subject: { kind: \"object\", objectTypeId: subjectType, primaryId: subjectId } }\n : {}),\n runId: requestedRunId,\n },\n { signal: waiting }\n )\n )\n } catch (error) {\n if (!waiting.aborted) throw error\n throw new CliError(\n {\n code: \"action_wait_timeout\",\n message:\n `Action run '${requestedRunId}' did not finish within ${requestWaitMs / 1_000} ` +\n \"seconds. It was not cancelled.\",\n hint:\n `Read it with 'sixb action-runs get ${requestedRunId}': its record exists once it ` +\n `has ended. A repeated request must pass '--run-id ${requestedRunId}', or the ` +\n \"Action runs twice.\",\n },\n EXIT_API\n )\n }\n }\n fail(`Unknown actions command '${sub}'.`)\n}\n",
|
|
8
9
|
"/** Stable safety and output bounds shared by local and sandbox modes. */\nexport const CLI_LIMITS = {\n list: { default: 20, maximum: 1_000 },\n search: { default: 20, maximum: 50 },\n /** Mirrors the server's vector query text bound so oversized text fails before any request. */\n vectorSearchText: { maximum: 8_000 },\n telemetryHistory: { default: 100, maximum: 1_000 },\n linkPage: { default: 100, maximum: 1_000 },\n inspect: {\n depth: { default: 2, maximum: 3 },\n objects: { default: 20, maximum: 100 },\n links: { default: 50, maximum: 500 },\n maximumPages: 10,\n },\n} as const\n\nexport const DEFAULT_LIST_ORDER = \"desc\" as const\nexport const DEFAULT_OBJECT_ORDER_BY = \"updatedAt\" as const\nexport const DEFAULT_TELEMETRY_ORDER = \"desc\" as const\n",
|
|
9
|
-
"import {\n CLI_LIMITS,\n DEFAULT_LIST_ORDER,\n DEFAULT_OBJECT_ORDER_BY,\n DEFAULT_TELEMETRY_ORDER,\n} from \"../policies\"\n\nconst SANDBOX_MAIN_HELP = `Sixb agent CLI\n\nUsage:\n sixb <command> [options]\n\nThe CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\nAPI commands emit JSON. Help, version, and examples emit text. Downloads write to --output and\nemit a JSON receipt.\n\nDiscovery:\n sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n sixb project show Show project metadata\n sixb ontology list Compact visible type and relationship catalog\n sixb ontology get <type> Inspect one object type, properties, links, and actions\n\nObjects:\n sixb objects inspect <type> <id> Inspect an object and its related graph in one command\n sixb objects list [options] Browse materialized objects\n sixb objects get <type> <id>... Exact lookup through opaque object references\n sixb objects search <text> Search visible objects by id prefix and full text\n sixb objects search <text> --type <type>\n Semantic search through the type's vector profile\n sixb objects query --file <file|-> Execute query IR from JSON\n sixb objects count --file <file|-> Count a query without returning rows\n sixb objects exists --file <file|-> Test whether a query has a match\n sixb objects facets --file <file|-> Run a {query, facets} request\n sixb objects links <type> <id> Read exact persisted links\n\nTelemetry:\n sixb telemetry latest <type> <id> <property>\n sixb telemetry history <type> <id> <property> [options]\n sixb telemetry query --file <file|->\n\nActions and workflows:\n sixb actions list|get|request ...\n sixb action-runs list|get ...\n sixb workflows list|get|start ...\n sixb workflow-runs list|get ...\n\nFiles:\n sixb files upload|download ...\n\nRun \\`sixb <group> --help\\` or \\`sixb <group> <command> --help\\` for exact arguments.\nFor query IR, run \\`sixb objects query --help\\` and \\`sixb objects query --example list\\`.`\n\nconst LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace(\"Sixb agent CLI\", \"Sixb instance CLI\")\n .replace(\n \"The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\",\n \"The CLI uses the selected local profile and its API credentials.\"\n )\n .replace(\n \" sixb doctor Check the sandbox and API gateway\\n sixb context Print the current run context\\n\",\n \"\"\n )\n\nexport function renderInstanceHelp(mode: \"local\" | \"sandbox\"): string {\n return mode === \"sandbox\" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP\n}\n\nconst SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.\nWith --type, the server embeds the text with the profile's model and ranks results by score,\na cosine similarity where higher is closer. \\`sixb ontology list\\` shows each type's\nvectorProfiles. To combine semantic search with filters, run\n\\`sixb objects query --example vector\\`.`\n\nexport const SEARCH_HELP = `Usage:\n sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]\n sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]\n\n--limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several\nprofiles.\n\n${SEARCH_DETAILS}`\n\nexport const OBJECTS_HELP = `Usage:\n sixb objects inspect <object-type> <primary-id> [options]\n sixb objects list [options]\n sixb objects get <object-type> <primary-id>...\n sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects count --file <path|->\n sixb objects exists --file <path|->\n sixb objects facets --file <path|->\n sixb objects facets --example\n sixb objects links <object-type> <primary-id> [options]\n\nList options:\n --type <id> Exact ontology object type id\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order-by createdAt|updatedAt|primaryId Defaults to ${DEFAULT_OBJECT_ORDER_BY}\n --order asc|desc Defaults to ${DEFAULT_LIST_ORDER}\n --id-prefix <value> Primary-id prefix\n --id-suffix <value> Primary-id suffix\n --created-after|--created-before <RFC3339>\n --updated-after|--updated-before <RFC3339>\n\nSearch options:\n --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}\n --type <id> Semantic search through this type's vector profile\n --vector-profile <name> Required when the type declares several profiles\n\nLinks options:\n --link <link-id>\n --direction outgoing|incoming|both Defaults to both\n --page-size <1-${CLI_LIMITS.linkPage.maximum}> Defaults to ${CLI_LIMITS.linkPage.default}\n --page-token <token> Continue an edge page\n --include-objects Include selected and current-page endpoint objects\n\nInspect options:\n --depth <0-${CLI_LIMITS.inspect.depth.maximum}> Defaults to ${CLI_LIMITS.inspect.depth.default}; use 0 for only the object\n --max-objects <1-${CLI_LIMITS.inspect.objects.maximum}> Defaults to ${CLI_LIMITS.inspect.objects.default}\n --max-links <1-${CLI_LIMITS.inspect.links.maximum}> Defaults to ${CLI_LIMITS.inspect.links.default}\n --full Include timestamps and encountered type definitions\n\nUse \\`objects get\\` first when context provides an exact object reference. Use \\`objects inspect\\`\nonly when related objects are needed; it follows both relationship directions to depth 2 by\ndefault and returns a bounded graph.\nInspect omits materialization timestamps and ontology definitions by default. Use \\`--full\\` when\nstorage timestamps, declared links, or available actions are needed.\n\n${SEARCH_DETAILS}\n\n\\`objects get\\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or\n% are safe. Identifiers are case-sensitive.`\n\nexport const QUERY_HELP = `Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <exact|filter|incoming|expand|sort|page|vector>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n set, sort, limit, page, project, and expand are also supported.\n\nPredicates use op, not kind:\n and/or, not, {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"}, neq, lt, lte, gt, gte,\n in, exists, and contains.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nRun \\`sixb ontology get <type>\\` first; never guess property or link ids. Use refs for exact\nidentities. Put limits and pages inside the query tree.\n\nVector profile names are the keys of the type's search.vectors. Vector input is a start node,\noptionally under filters; k bounds the ranked matches and results carry a score.`\n\nexport const GROUP_HELP = {\n doctor: \"Usage: sixb doctor\",\n context: \"Usage: sixb context\",\n project: \"Usage: sixb project show\",\n ontology: `Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>`,\n telemetry: `Usage:\n sixb telemetry latest <object-type> <primary-id> <property-id>\n sixb telemetry history <object-type> <primary-id> <property-id> [options]\n sixb telemetry query --file <path|->\n\nHistory options:\n --from <RFC3339>\n --to <RFC3339>\n --limit <1-${CLI_LIMITS.telemetryHistory.maximum}> Defaults to ${CLI_LIMITS.telemetryHistory.default}\n --order <asc|desc> Timestamp order; defaults to ${DEFAULT_TELEMETRY_ORDER}`,\n actions: `Usage:\n sixb actions list [--type <object-type>]\n sixb actions get <action-id>\n sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]\n\n\\`actions get\\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file\ncontains that parameter object; use - to read standard input. --wait returns the terminal Action\nrun and waits at most 25 seconds.`,\n \"action-runs\": `Usage:\n sixb action-runs list [options]\n sixb action-runs get <run-id>\n\nList options:\n --action <action-id>\n --type <object-type>\n --id <primary-id>\n --status queued|running|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n files: `Usage:\n sixb files upload <local-path> [--logical-path <path>]\n sixb files download object <type> <id> --path <json-pointer> --output <local-path>\n sixb files download action-run|workflow-run <run-id> --path <json-pointer> --output <local-path>`,\n workflows: `Usage:\n sixb workflows list\n sixb workflows get <workflow-id>\n sixb workflows start <workflow-id> [--file <path|->]\n\nThe JSON file contains the workflow input object. Use - to read standard input.`,\n \"workflow-runs\": `Usage:\n sixb workflow-runs list [options]\n sixb workflow-runs get <run-id>\n\nList options:\n --workflow <workflow-id>\n --status queued|running|waiting|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n} as const\n\nexport const QUERY_EXAMPLES: Readonly<Record<string, string>> = {\n exact:\n '{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]}',\n filter: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"limit\":${CLI_LIMITS.list.default}}`,\n incoming:\n '{\"kind\":\"traverse\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\"}',\n expand: `{\"kind\":\"expand\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"expansions\":[{\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\",\"limit\":${CLI_LIMITS.list.default}}]}`,\n sort: `{\"kind\":\"limit\",\"input\":{\"kind\":\"sort\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]},\"limit\":${CLI_LIMITS.list.default}}`,\n page: `{\"kind\":\"page\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"pageSize\":${CLI_LIMITS.list.default}}`,\n vector: `{\"kind\":\"vector\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Product\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"vector\":\"waterproof trail shoes\",\"profile\":\"content\",\"k\":${CLI_LIMITS.search.default}}`,\n}\n\nexport const FACETS_EXAMPLE =\n '{\"query\":{\"kind\":\"start\",\"objectTypeId\":\"WorkOrder\"},\"facets\":[{\"propertyId\":\"status\",\"limit\":10}]}'\n",
|
|
10
|
+
"import {\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>]\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. \\`actions request\\` runs the Action\nand prints its finished run, with its status and any error. It waits at most 25 seconds: a run that\ntakes longer keeps running, and the error names the run to read with \\`action-runs get\\`.`,\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 succeeded|failed\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
11
|
"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
|
-
"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
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
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
|
-
"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 = [\"
|
|
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 = [\"succeeded\", \"failed\"] 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",
|
|
19
19
|
"import type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { readJson } from \"./shared\"\n\nexport async function workflows(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.workflows)\n if (sub === \"list\") {\n parseCommandArgs(rest, {}, \"workflows list\")\n return writeJson(await api.get(\"/api/workflows\"))\n }\n if (sub === \"get\") {\n const {\n positionals: [workflowId],\n } = parseCommandArgs(rest, {}, \"workflows get\", 1)\n return writeJson(await api.get(`/api/workflows/${encodeURIComponent(workflowId ?? \"\")}`))\n }\n if (sub === \"start\") {\n const {\n positionals: [workflowId],\n options,\n } = parseCommandArgs(rest, { \"--file\": \"string\" }, \"workflows start\", 1)\n const input: unknown = options[\"--file\"] ? await readJson(options[\"--file\"]) : {}\n if (Array.isArray(input) || typeof input !== \"object\" || input === null) {\n fail(\"Workflow input must be a JSON object.\")\n }\n return writeJson(\n await api.post(`/api/workflows/${encodeURIComponent(workflowId ?? \"\")}/runs`, { input })\n )\n }\n fail(`Unknown workflows command '${sub}'.`)\n}\n",
|
|
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": "
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "D8A3DF8338E3251F64756E2164756E21",
|
|
25
25
|
"names": []
|
|
26
26
|
}
|
package/package.json
CHANGED
package/src/api-client.ts
CHANGED
|
@@ -27,11 +27,17 @@ export class ApiClient {
|
|
|
27
27
|
return this.json(url, { method: "GET" })
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
/** `signal` stops waiting for the response; the abort is rethrown as it was raised. */
|
|
31
|
+
async post(
|
|
32
|
+
path: string,
|
|
33
|
+
body: unknown,
|
|
34
|
+
options: { readonly signal?: AbortSignal } = {}
|
|
35
|
+
): Promise<unknown> {
|
|
31
36
|
return this.json(this.url(path), {
|
|
32
37
|
method: "POST",
|
|
33
38
|
headers: { "content-type": "application/json" },
|
|
34
39
|
body: JSON.stringify(body),
|
|
40
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
35
41
|
})
|
|
36
42
|
}
|
|
37
43
|
|
|
@@ -91,7 +97,8 @@ export class ApiClient {
|
|
|
91
97
|
const headers = new Headers(init.headers)
|
|
92
98
|
if (this.authorization) headers.set("authorization", this.authorization)
|
|
93
99
|
response = await fetch(url, { ...init, headers })
|
|
94
|
-
} catch {
|
|
100
|
+
} catch (error) {
|
|
101
|
+
if (init.signal?.aborted) throw error
|
|
95
102
|
throw new CliError(
|
|
96
103
|
{
|
|
97
104
|
code: "api_unreachable",
|
package/src/arguments.ts
CHANGED
|
@@ -126,5 +126,6 @@ export function enumValue<const T extends readonly string[]>(
|
|
|
126
126
|
|
|
127
127
|
function formatAlternatives(values: readonly string[]): string {
|
|
128
128
|
if (values.length < 2) return values[0] ?? "a supported value"
|
|
129
|
+
if (values.length === 2) return `${values[0]} or ${values[1]}`
|
|
129
130
|
return `${values.slice(0, -1).join(", ")}, or ${values.at(-1)}`
|
|
130
131
|
}
|
package/src/commands/actions.ts
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
1
2
|
import type { ApiClient } from "../api-client"
|
|
2
3
|
import { isHelp, parseCommandArgs, requestsHelp } from "../arguments"
|
|
3
4
|
import { CliError, EXIT_API, fail, writeJson, writeText } from "../output"
|
|
4
5
|
import { GROUP_HELP } from "./metadata"
|
|
5
6
|
import { asRecord, parseQueryOptions, readJson } from "./shared"
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* How long `actions request` waits for the run it requested. An agent's command is killed after 30
|
|
10
|
+
* seconds, which is also how long an Action has to reach its boundary: stopping first leaves the
|
|
11
|
+
* agent with the run id, instead of a dead command and a request it can only repeat.
|
|
12
|
+
*/
|
|
13
|
+
const ACTION_REQUEST_WAIT_MS = 25_000
|
|
14
|
+
|
|
15
|
+
export async function actions(
|
|
16
|
+
api: ApiClient,
|
|
17
|
+
args: readonly string[],
|
|
18
|
+
/** Test-only override of {@link ACTION_REQUEST_WAIT_MS}. */
|
|
19
|
+
requestWaitMs = ACTION_REQUEST_WAIT_MS
|
|
20
|
+
): Promise<void> {
|
|
8
21
|
const [sub, ...rest] = args
|
|
9
22
|
if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.actions)
|
|
10
23
|
if (sub === "get") {
|
|
@@ -28,7 +41,6 @@ export async function actions(api: ApiClient, args: readonly string[]): Promise<
|
|
|
28
41
|
"--subject-id": "string",
|
|
29
42
|
"--file": "string",
|
|
30
43
|
"--run-id": "string",
|
|
31
|
-
"--wait": "boolean",
|
|
32
44
|
},
|
|
33
45
|
"actions request",
|
|
34
46
|
1
|
|
@@ -38,7 +50,6 @@ export async function actions(api: ApiClient, args: readonly string[]): Promise<
|
|
|
38
50
|
const subjectId = options["--subject-id"]
|
|
39
51
|
const paramsSource = options["--file"]
|
|
40
52
|
const runId = options["--run-id"]
|
|
41
|
-
const wait = options["--wait"]
|
|
42
53
|
if (Boolean(subjectType) !== Boolean(subjectId)) {
|
|
43
54
|
fail("--subject-type and --subject-id must be provided together.")
|
|
44
55
|
}
|
|
@@ -46,49 +57,40 @@ export async function actions(api: ApiClient, args: readonly string[]): Promise<
|
|
|
46
57
|
if (Array.isArray(params) || typeof params !== "object" || params === null) {
|
|
47
58
|
fail("Action params must be a JSON object.")
|
|
48
59
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
// The API answers once the Action has run, with its terminal run. Every request names its run,
|
|
61
|
+
// so that one this command stops waiting for can still be read: the run is not cancelled.
|
|
62
|
+
const requestedRunId = runId ?? `act_${randomUUID()}`
|
|
63
|
+
const waiting = AbortSignal.timeout(requestWaitMs)
|
|
64
|
+
try {
|
|
65
|
+
return writeJson(
|
|
66
|
+
await api.post(
|
|
67
|
+
`/api/actions/${encodeURIComponent(actionId)}`,
|
|
68
|
+
{
|
|
69
|
+
params,
|
|
70
|
+
...(subjectType && subjectId
|
|
71
|
+
? { subject: { kind: "object", objectTypeId: subjectType, primaryId: subjectId } }
|
|
72
|
+
: {}),
|
|
73
|
+
runId: requestedRunId,
|
|
74
|
+
},
|
|
75
|
+
{ signal: waiting }
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if (!waiting.aborted) throw error
|
|
60
80
|
throw new CliError(
|
|
61
81
|
{
|
|
62
|
-
code: "
|
|
63
|
-
message:
|
|
82
|
+
code: "action_wait_timeout",
|
|
83
|
+
message:
|
|
84
|
+
`Action run '${requestedRunId}' did not finish within ${requestWaitMs / 1_000} ` +
|
|
85
|
+
"seconds. It was not cancelled.",
|
|
86
|
+
hint:
|
|
87
|
+
`Read it with 'sixb action-runs get ${requestedRunId}': its record exists once it ` +
|
|
88
|
+
`has ended. A repeated request must pass '--run-id ${requestedRunId}', or the ` +
|
|
89
|
+
"Action runs twice.",
|
|
64
90
|
},
|
|
65
91
|
EXIT_API
|
|
66
92
|
)
|
|
67
93
|
}
|
|
68
|
-
return writeJson(await waitForActionRun(api, requestedRunId))
|
|
69
94
|
}
|
|
70
95
|
fail(`Unknown actions command '${sub}'.`)
|
|
71
96
|
}
|
|
72
|
-
|
|
73
|
-
const ACTION_WAIT_TIMEOUT_MS = 25_000
|
|
74
|
-
const ACTION_WAIT_POLL_MS = 250
|
|
75
|
-
const TERMINAL_ACTION_STATUSES = new Set(["succeeded", "failed", "cancelled"])
|
|
76
|
-
|
|
77
|
-
async function waitForActionRun(api: ApiClient, runId: string): Promise<unknown> {
|
|
78
|
-
const startedAt = Date.now()
|
|
79
|
-
while (Date.now() - startedAt < ACTION_WAIT_TIMEOUT_MS) {
|
|
80
|
-
const run = await api.get(`/api/action-runs/${encodeURIComponent(runId)}`)
|
|
81
|
-
const status = asRecord(run).status
|
|
82
|
-
if (typeof status === "string" && TERMINAL_ACTION_STATUSES.has(status)) return run
|
|
83
|
-
await new Promise((resolve) => setTimeout(resolve, ACTION_WAIT_POLL_MS))
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
throw new CliError(
|
|
87
|
-
{
|
|
88
|
-
code: "action_wait_timeout",
|
|
89
|
-
message: `Action run '${runId}' did not finish within ${ACTION_WAIT_TIMEOUT_MS / 1_000} seconds.`,
|
|
90
|
-
hint: `Inspect it with 'sixb action-runs get ${runId}'.`,
|
|
91
|
-
},
|
|
92
|
-
EXIT_API
|
|
93
|
-
)
|
|
94
|
-
}
|
package/src/commands/metadata.ts
CHANGED
|
@@ -21,6 +21,9 @@ 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
|
|
@@ -60,6 +63,10 @@ const LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace("Sixb agent CLI", "Sixb instan
|
|
|
60
63
|
" sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n",
|
|
61
64
|
""
|
|
62
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
|
+
)
|
|
63
70
|
|
|
64
71
|
export function renderInstanceHelp(mode: "local" | "sandbox"): string {
|
|
65
72
|
return mode === "sandbox" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP
|
|
@@ -135,7 +142,7 @@ ${SEARCH_DETAILS}
|
|
|
135
142
|
|
|
136
143
|
export const QUERY_HELP = `Usage:
|
|
137
144
|
sixb objects query --file <path|-> [--include-total|--no-total]
|
|
138
|
-
sixb objects query --example <
|
|
145
|
+
sixb objects query --example <name>
|
|
139
146
|
sixb objects query --example list
|
|
140
147
|
|
|
141
148
|
Input is a query node. A full {"query": ...} request is also accepted.
|
|
@@ -146,17 +153,32 @@ Query nodes compose through input:
|
|
|
146
153
|
filter {"kind":"filter","input":<query>,"predicate":<predicate>}
|
|
147
154
|
text {"kind":"text","input":<query>,"query":"words","fields":["name"]}
|
|
148
155
|
traverse {"kind":"traverse","input":<query>,"linkId":"link","direction":"outgoing"}
|
|
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}]}
|
|
149
162
|
vector {"kind":"vector","input":<start|filter>,"vector":"text","profile":"name","k":10}
|
|
150
|
-
|
|
163
|
+
rerank {"kind":"rerank","input":<vector>,"model":{"provider":"provider","modelId":"model"}}
|
|
151
164
|
|
|
152
165
|
Predicates use op, not kind:
|
|
153
|
-
|
|
154
|
-
|
|
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.
|
|
155
176
|
|
|
156
177
|
Traversal and expansion directions are outgoing or incoming. For incoming relationships, the link
|
|
157
178
|
is declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.
|
|
158
179
|
|
|
159
|
-
|
|
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
|
|
160
182
|
identities. Put limits and pages inside the query tree.
|
|
161
183
|
|
|
162
184
|
Vector profile names are the keys of the type's search.vectors. Vector input is a start node,
|
|
@@ -182,11 +204,12 @@ History options:
|
|
|
182
204
|
actions: `Usage:
|
|
183
205
|
sixb actions list [--type <object-type>]
|
|
184
206
|
sixb actions get <action-id>
|
|
185
|
-
sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
|
|
207
|
+
sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
|
|
186
208
|
|
|
187
209
|
\`actions get\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file
|
|
188
|
-
contains that parameter object; use - to read standard input.
|
|
189
|
-
run and waits at most 25 seconds
|
|
210
|
+
contains that parameter object; use - to read standard input. \`actions request\` runs the Action
|
|
211
|
+
and prints its finished run, with its status and any error. It waits at most 25 seconds: a run that
|
|
212
|
+
takes longer keeps running, and the error names the run to read with \`action-runs get\`.`,
|
|
190
213
|
"action-runs": `Usage:
|
|
191
214
|
sixb action-runs list [options]
|
|
192
215
|
sixb action-runs get <run-id>
|
|
@@ -195,7 +218,7 @@ List options:
|
|
|
195
218
|
--action <action-id>
|
|
196
219
|
--type <object-type>
|
|
197
220
|
--id <primary-id>
|
|
198
|
-
--status
|
|
221
|
+
--status succeeded|failed
|
|
199
222
|
--started-after|--started-before <RFC3339>
|
|
200
223
|
--limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}
|
|
201
224
|
--offset <n> Non-negative; defaults to 0
|
|
@@ -227,6 +250,11 @@ export const QUERY_EXAMPLES: Readonly<Record<string, string>> = {
|
|
|
227
250
|
exact:
|
|
228
251
|
'{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]}',
|
|
229
252
|
filter: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"eq","propertyId":"status","value":"active"}},"limit":${CLI_LIMITS.list.default}}`,
|
|
253
|
+
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}}`,
|
|
254
|
+
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}}`,
|
|
255
|
+
in: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"in","propertyId":"status","values":["active","trial"]}},"limit":${CLI_LIMITS.list.default}}`,
|
|
256
|
+
exists: `{"kind":"limit","input":{"kind":"filter","input":{"kind":"start","objectTypeId":"Customer"},"predicate":{"op":"exists","propertyId":"accountManager","value":false}},"limit":${CLI_LIMITS.list.default}}`,
|
|
257
|
+
project: `{"kind":"project","input":{"kind":"limit","input":{"kind":"start","objectTypeId":"Customer"},"limit":${CLI_LIMITS.list.default}},"properties":["name","status"]}`,
|
|
230
258
|
incoming:
|
|
231
259
|
'{"kind":"traverse","input":{"kind":"refs","refs":[{"objectTypeId":"RepositoryIssue","primaryId":"github:issue:owner/repo#297"}]},"linkId":"issue","direction":"incoming","sourceObjectTypeId":"RepositoryComment"}',
|
|
232
260
|
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}}]}`,
|
package/src/commands/runs.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { CLI_LIMITS, DEFAULT_LIST_ORDER } from "../policies"
|
|
|
12
12
|
import { GROUP_HELP } from "./metadata"
|
|
13
13
|
import { normalizeWindowOptions, parseQueryOptions } from "./shared"
|
|
14
14
|
|
|
15
|
-
const ACTION_RUN_STATUSES = ["
|
|
15
|
+
const ACTION_RUN_STATUSES = ["succeeded", "failed"] as const
|
|
16
16
|
const WORKFLOW_RUN_STATUSES = [
|
|
17
17
|
"queued",
|
|
18
18
|
"running",
|