@sixb/cli-core 0.1.7 → 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.
@@ -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
- post(path: string, body: unknown): Promise<unknown>;
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;
@@ -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;IAKzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,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;CAoDpB;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
+ {"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[]): Promise<void>;
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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEpF"}
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"}
@@ -8,8 +8,8 @@ export declare const GROUP_HELP: {
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>] [--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.";
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 queued|running|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";
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":"AAsEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAEpE;AAQD,eAAO,MAAM,WAAW,QAON,CAAA;AAElB,eAAO,MAAM,YAAY,QAmDmB,CAAA;AAE5C,eAAO,MAAM,UAAU,QA0C0D,CAAA;AAEjF,eAAO,MAAM,UAAU;;;;;;;;;;;CA2Db,CAAA;AAEV,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3D,CAAA;AAED,eAAO,MAAM,cAAc,0HAC4E,CAAA"}
1
+ {"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 },
@@ -471,11 +479,12 @@ History options:
471
479
  actions: `Usage:
472
480
  sixb actions list [--type <object-type>]
473
481
  sixb actions get <action-id>
474
- sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]
482
+ sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
475
483
 
476
484
  \`actions get\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file
477
- contains that parameter object; use - to read standard input. --wait returns the terminal Action
478
- 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\`.`,
479
488
  "action-runs": `Usage:
480
489
  sixb action-runs list [options]
481
490
  sixb action-runs get <run-id>
@@ -484,7 +493,7 @@ List options:
484
493
  --action <action-id>
485
494
  --type <object-type>
486
495
  --id <primary-id>
487
- --status queued|running|succeeded|failed|cancelled
496
+ --status succeeded|failed
488
497
  --started-after|--started-before <RFC3339>
489
498
  --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}
490
499
  --offset <n> Non-negative; defaults to 0
@@ -593,7 +602,8 @@ async function readStdin() {
593
602
  }
594
603
 
595
604
  // src/commands/actions.ts
596
- async function actions(api, args) {
605
+ var ACTION_REQUEST_WAIT_MS = 25000;
606
+ async function actions(api, args, requestWaitMs = ACTION_REQUEST_WAIT_MS) {
597
607
  const [sub, ...rest] = args;
598
608
  if (!sub || isHelp(sub) || requestsHelp(rest))
599
609
  return writeText(GROUP_HELP.actions);
@@ -615,15 +625,13 @@ async function actions(api, args) {
615
625
  "--subject-type": "string",
616
626
  "--subject-id": "string",
617
627
  "--file": "string",
618
- "--run-id": "string",
619
- "--wait": "boolean"
628
+ "--run-id": "string"
620
629
  }, "actions request", 1);
621
630
  const actionId = positionals[0] ?? "";
622
631
  const subjectType = options["--subject-type"];
623
632
  const subjectId = options["--subject-id"];
624
633
  const paramsSource = options["--file"];
625
634
  const runId = options["--run-id"];
626
- const wait = options["--wait"];
627
635
  if (Boolean(subjectType) !== Boolean(subjectId)) {
628
636
  fail("--subject-type and --subject-id must be provided together.");
629
637
  }
@@ -631,42 +639,26 @@ async function actions(api, args) {
631
639
  if (Array.isArray(params) || typeof params !== "object" || params === null) {
632
640
  fail("Action params must be a JSON object.");
633
641
  }
634
- const requested = await api.post(`/api/actions/${encodeURIComponent(actionId)}`, {
635
- params,
636
- ...subjectType && subjectId ? { subject: { kind: "object", objectTypeId: subjectType, primaryId: subjectId } } : {},
637
- ...runId ? { runId } : {}
638
- });
639
- if (!wait)
640
- return writeJson(requested);
641
- const requestedRunId = asRecord2(requested).runId;
642
- if (typeof requestedRunId !== "string" || requestedRunId.length === 0) {
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;
643
653
  throw new CliError({
644
- code: "invalid_api_response",
645
- message: "The Action request response did not contain a run id."
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."
646
657
  }, EXIT_API);
647
658
  }
648
- return writeJson(await waitForActionRun(api, requestedRunId));
649
659
  }
650
660
  fail(`Unknown actions command '${sub}'.`);
651
661
  }
652
- var ACTION_WAIT_TIMEOUT_MS = 25000;
653
- var ACTION_WAIT_POLL_MS = 250;
654
- var TERMINAL_ACTION_STATUSES = new Set(["succeeded", "failed", "cancelled"]);
655
- async function waitForActionRun(api, runId) {
656
- const startedAt = Date.now();
657
- while (Date.now() - startedAt < ACTION_WAIT_TIMEOUT_MS) {
658
- const run = await api.get(`/api/action-runs/${encodeURIComponent(runId)}`);
659
- const status = asRecord2(run).status;
660
- if (typeof status === "string" && TERMINAL_ACTION_STATUSES.has(status))
661
- return run;
662
- await new Promise((resolve) => setTimeout(resolve, ACTION_WAIT_POLL_MS));
663
- }
664
- throw new CliError({
665
- code: "action_wait_timeout",
666
- message: `Action run '${runId}' did not finish within ${ACTION_WAIT_TIMEOUT_MS / 1000} seconds.`,
667
- hint: `Inspect it with 'sixb action-runs get ${runId}'.`
668
- }, EXIT_API);
669
- }
670
662
 
671
663
  // src/commands/files.ts
672
664
  import { access } from "fs/promises";
@@ -1263,7 +1255,7 @@ async function project(api, args) {
1263
1255
  }
1264
1256
 
1265
1257
  // src/commands/runs.ts
1266
- var ACTION_RUN_STATUSES = ["queued", "running", "succeeded", "failed", "cancelled"];
1258
+ var ACTION_RUN_STATUSES = ["succeeded", "failed"];
1267
1259
  var WORKFLOW_RUN_STATUSES = [
1268
1260
  "queued",
1269
1261
  "running",
@@ -1490,4 +1482,4 @@ export {
1490
1482
  writeText
1491
1483
  };
1492
1484
 
1493
- //# debugId=F1EB880C95B058F464756E2164756E21
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/policies.ts", "../src/commands/metadata.ts", "../src/commands/shared.ts", "../src/commands/actions.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"],
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, body: unknown): Promise<unknown> {\n return this.json(this.url(path), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n })\n }\n\n async upload(path: string, source: string, logicalPath?: string): Promise<unknown> {\n const form = new FormData()\n form.append(\"file\", new Blob([new Uint8Array(await readFile(source))]), basename(source))\n if (logicalPath) form.append(\"logicalPath\", logicalPath)\n return this.json(this.url(path), { method: \"POST\", body: form })\n }\n\n async download(\n path: string,\n output: string,\n query?: Readonly<Record<string, string | undefined>>\n ): Promise<void> {\n const response = await this.fetch(this.url(path, query), { method: \"GET\" })\n const temporary = join(dirname(output), `.${basename(output)}.sixb-${randomUUID()}.tmp`)\n try {\n const body = response.body\n ? Readable.fromWeb(response.body as unknown as NodeReadableStream)\n : Readable.from([])\n await pipeline(body, createWriteStream(temporary, { flags: \"wx\" }))\n await rename(temporary, output)\n } catch (error) {\n await rm(temporary, { force: true }).catch(() => {})\n throw error\n }\n }\n\n private url(path: string, query?: Readonly<Record<string, string | undefined>>): URL {\n if (!this.baseUrl) fail(this.missingBaseUrlMessage, \"runtime_unavailable\")\n validateApiPath(path)\n const url = new URL(`${this.baseUrl}${path}`)\n for (const [key, value] of Object.entries(query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, value)\n }\n return url\n }\n\n private async json(url: URL, init: RequestInit): Promise<unknown> {\n const response = await this.fetch(url, init)\n const text = await response.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n throw new CliError(\n { code: \"invalid_api_response\", message: \"The Sixb API returned invalid JSON.\" },\n EXIT_API\n )\n }\n }\n\n private async fetch(url: URL, init: RequestInit): Promise<Response> {\n let response: Response\n try {\n const headers = new Headers(init.headers)\n if (this.authorization) headers.set(\"authorization\", this.authorization)\n response = await fetch(url, { ...init, headers })\n } catch {\n throw new CliError(\n {\n code: \"api_unreachable\",\n message: this.unavailableMessage,\n hint: this.unavailableHint,\n },\n EXIT_API\n )\n }\n if (response.ok) return response\n\n const body = await response.text()\n let parsed: unknown\n try {\n parsed = JSON.parse(body)\n } catch {\n parsed = undefined\n }\n const record = asRecord(parsed)\n const error = record.error\n const nested = asRecord(error)\n const code = stringField(record, \"code\") ?? stringField(nested, \"code\") ?? \"http_error\"\n const message =\n stringField(record, \"message\") ??\n stringField(nested, \"message\") ??\n (typeof error === \"string\"\n ? error\n : `The Sixb API request failed with HTTP ${response.status}.`)\n const hint = stringField(record, \"hint\") ?? stringField(nested, \"hint\")\n const issues = Array.isArray(record.issues)\n ? record.issues\n : Array.isArray(nested.issues)\n ? nested.issues\n : undefined\n throw new CliError(\n {\n code,\n status: response.status,\n message,\n ...(hint ? { hint } : {}),\n ...(issues ? { issues } : {}),\n },\n EXIT_API\n )\n }\n}\n\nexport interface ApiClientOptions {\n readonly baseUrl: string\n readonly authorization?: string\n readonly missingBaseUrlMessage: string\n readonly unavailableMessage: string\n readonly unavailableHint: string\n}\n\nfunction validateApiPath(path: string): void {\n const invalid = (): never => fail(\"API paths must be relative and start with /api/.\")\n if (path.includes(\"\\\\\") || path.includes(\"#\")) invalid()\n const normalized = (() => {\n try {\n return new URL(path, \"http://sixb.invalid\")\n } catch {\n return invalid()\n }\n })()\n if (\n normalized.origin !== \"http://sixb.invalid\" ||\n (normalized.pathname !== \"/api\" && !normalized.pathname.startsWith(\"/api/\"))\n ) {\n invalid()\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction stringField(record: Readonly<Record<string, unknown>>, key: string): string | undefined {\n const value = record[key]\n return typeof value === \"string\" ? value : undefined\n}\n",
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\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\n\\`sixb ontology get\\` for a type that has no file there.\n\nObjects:\n sixb objects inspect <type> <id> Inspect an object and its related graph in one command\n sixb objects list [options] Browse materialized objects\n sixb objects get <type> <id>... Exact lookup through opaque object references\n sixb objects search <text> Search visible objects by id prefix and full text\n sixb objects search <text> --type <type>\n Semantic search through the type's vector profile\n sixb objects query --file <file|-> Execute query IR from JSON\n sixb objects count --file <file|-> Count a query without returning rows\n sixb objects exists --file <file|-> Test whether a query has a match\n sixb objects facets --file <file|-> Run a {query, facets} request\n sixb objects links <type> <id> Read exact persisted links\n\nTelemetry:\n sixb telemetry latest <type> <id> <property>\n sixb telemetry history <type> <id> <property> [options]\n sixb telemetry query --file <file|->\n\nActions and workflows:\n sixb actions list|get|request ...\n sixb action-runs list|get ...\n sixb workflows list|get|start ...\n sixb workflow-runs list|get ...\n\nFiles:\n sixb files upload|download ...\n\nRun \\`sixb <group> --help\\` or \\`sixb <group> <command> --help\\` for exact arguments.\nFor query IR, run \\`sixb objects query --help\\` and \\`sixb objects query --example list\\`.`\n\nconst LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace(\"Sixb agent CLI\", \"Sixb instance CLI\")\n .replace(\n \"The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\",\n \"The CLI uses the selected local profile and its API credentials.\"\n )\n .replace(\n \" sixb doctor Check the sandbox and API gateway\\n sixb context Print the current run context\\n\",\n \"\"\n )\n .replace(\n \"\\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\\n`sixb ontology get` for a type that has no file there.\\n\",\n \"\"\n )\n\nexport function renderInstanceHelp(mode: \"local\" | \"sandbox\"): string {\n return mode === \"sandbox\" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP\n}\n\nconst SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.\nWith --type, the server embeds the text with the profile's model and ranks results by score,\na cosine similarity where higher is closer. \\`sixb ontology list\\` shows each type's\nvectorProfiles. To combine semantic search with filters, run\n\\`sixb objects query --example vector\\`.`\n\nexport const SEARCH_HELP = `Usage:\n sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]\n sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]\n\n--limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several\nprofiles.\n\n${SEARCH_DETAILS}`\n\nexport const OBJECTS_HELP = `Usage:\n sixb objects inspect <object-type> <primary-id> [options]\n sixb objects list [options]\n sixb objects get <object-type> <primary-id>...\n sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects count --file <path|->\n sixb objects exists --file <path|->\n sixb objects facets --file <path|->\n sixb objects facets --example\n sixb objects links <object-type> <primary-id> [options]\n\nList options:\n --type <id> Exact ontology object type id\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order-by createdAt|updatedAt|primaryId Defaults to ${DEFAULT_OBJECT_ORDER_BY}\n --order asc|desc Defaults to ${DEFAULT_LIST_ORDER}\n --id-prefix <value> Primary-id prefix\n --id-suffix <value> Primary-id suffix\n --created-after|--created-before <RFC3339>\n --updated-after|--updated-before <RFC3339>\n\nSearch options:\n --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}\n --type <id> Semantic search through this type's vector profile\n --vector-profile <name> Required when the type declares several profiles\n\nLinks options:\n --link <link-id>\n --direction outgoing|incoming|both Defaults to both\n --page-size <1-${CLI_LIMITS.linkPage.maximum}> Defaults to ${CLI_LIMITS.linkPage.default}\n --page-token <token> Continue an edge page\n --include-objects Include selected and current-page endpoint objects\n\nInspect options:\n --depth <0-${CLI_LIMITS.inspect.depth.maximum}> Defaults to ${CLI_LIMITS.inspect.depth.default}; use 0 for only the object\n --max-objects <1-${CLI_LIMITS.inspect.objects.maximum}> Defaults to ${CLI_LIMITS.inspect.objects.default}\n --max-links <1-${CLI_LIMITS.inspect.links.maximum}> Defaults to ${CLI_LIMITS.inspect.links.default}\n --full Include timestamps and encountered type definitions\n\nUse \\`objects get\\` first when context provides an exact object reference. Use \\`objects inspect\\`\nonly when related objects are needed; it follows both relationship directions to depth 2 by\ndefault and returns a bounded graph.\nInspect omits materialization timestamps and ontology definitions by default. Use \\`--full\\` when\nstorage timestamps, declared links, or available actions are needed.\n\n${SEARCH_DETAILS}\n\n\\`objects get\\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or\n% are safe. Identifiers are case-sensitive.`\n\nexport const QUERY_HELP = `Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n set {\"kind\":\"set\",\"op\":\"union\",\"inputs\":[<query>,<query>]} op: union, intersect, subtract\n sort {\"kind\":\"sort\",\"input\":<query>,\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]}\n limit {\"kind\":\"limit\",\"input\":<query>,\"limit\":${CLI_LIMITS.list.default}}\n page {\"kind\":\"page\",\"input\":<query>,\"pageSize\":${CLI_LIMITS.list.default},\"pageToken\":\"from nextPageToken\"}\n project {\"kind\":\"project\",\"input\":<query>,\"properties\":[\"name\",\"status\"]}\n expand {\"kind\":\"expand\",\"input\":<query>,\"expansions\":[{\"linkId\":\"link\",\"direction\":\"outgoing\",\"limit\":5}]}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n rerank {\"kind\":\"rerank\",\"input\":<vector>,\"model\":{\"provider\":\"provider\",\"modelId\":\"model\"}}\n\nPredicates use op, not kind:\n {\"op\":\"and\",\"items\":[<predicate>,<predicate>]} or: same shape\n {\"op\":\"not\",\"item\":<predicate>}\n {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"} neq, lt, lte, gt, gte: same shape\n {\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"open\",\"blocked\"]}\n {\"op\":\"exists\",\"propertyId\":\"dueDate\",\"value\":true}\n {\"op\":\"contains\",\"propertyId\":\"tags\",\"value\":\"urgent\"}\n\nEvery field shown is required except includeSubtypes, fields, pageToken, properties, a sort\ndirection, and an expansion's limit. Sort by relevance after text or vector with\n{\"kind\":\"relevance\"}. Wrap the outermost node in project to return only the properties you need.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nNever guess property or link ids: run \\`sixb ontology get <type>\\` (in the agent sandbox, read\nthe type's file under $SIXB_ONTOLOGY_DIR). Use refs for exact\nidentities. Put limits and pages inside the query tree.\n\nVector profile names are the keys of the type's search.vectors. Vector input is a start node,\noptionally under filters; k bounds the ranked matches and results carry a score.`\n\nexport const GROUP_HELP = {\n doctor: \"Usage: sixb doctor\",\n context: \"Usage: sixb context\",\n project: \"Usage: sixb project show\",\n ontology: `Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>`,\n telemetry: `Usage:\n sixb telemetry latest <object-type> <primary-id> <property-id>\n sixb telemetry history <object-type> <primary-id> <property-id> [options]\n sixb telemetry query --file <path|->\n\nHistory options:\n --from <RFC3339>\n --to <RFC3339>\n --limit <1-${CLI_LIMITS.telemetryHistory.maximum}> Defaults to ${CLI_LIMITS.telemetryHistory.default}\n --order <asc|desc> Timestamp order; defaults to ${DEFAULT_TELEMETRY_ORDER}`,\n actions: `Usage:\n sixb actions list [--type <object-type>]\n sixb actions get <action-id>\n sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]\n\n\\`actions get\\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file\ncontains that parameter object; use - to read standard input. --wait returns the terminal Action\nrun and waits at most 25 seconds.`,\n \"action-runs\": `Usage:\n sixb action-runs list [options]\n sixb action-runs get <run-id>\n\nList options:\n --action <action-id>\n --type <object-type>\n --id <primary-id>\n --status queued|running|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n files: `Usage:\n sixb files upload <local-path> [--logical-path <path>]\n sixb files download object <type> <id> --path <json-pointer> --output <local-path>\n sixb files download action-run|workflow-run <run-id> --path <json-pointer> --output <local-path>`,\n workflows: `Usage:\n sixb workflows list\n sixb workflows get <workflow-id>\n sixb workflows start <workflow-id> [--file <path|->]\n\nThe JSON file contains the workflow input object. Use - to read standard input.`,\n \"workflow-runs\": `Usage:\n sixb workflow-runs list [options]\n sixb workflow-runs get <run-id>\n\nList options:\n --workflow <workflow-id>\n --status queued|running|waiting|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n} as const\n\nexport const QUERY_EXAMPLES: Readonly<Record<string, string>> = {\n exact:\n '{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]}',\n filter: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"limit\":${CLI_LIMITS.list.default}}`,\n and: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"and\",\"items\":[{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"},{\"op\":\"gte\",\"propertyId\":\"createdAt\",\"value\":\"2026-01-01T00:00:00Z\"}]}},\"limit\":${CLI_LIMITS.list.default}}`,\n not: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"not\",\"item\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"churned\"}}},\"limit\":${CLI_LIMITS.list.default}}`,\n in: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"active\",\"trial\"]}},\"limit\":${CLI_LIMITS.list.default}}`,\n exists: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"exists\",\"propertyId\":\"accountManager\",\"value\":false}},\"limit\":${CLI_LIMITS.list.default}}`,\n project: `{\"kind\":\"project\",\"input\":{\"kind\":\"limit\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"limit\":${CLI_LIMITS.list.default}},\"properties\":[\"name\",\"status\"]}`,\n incoming:\n '{\"kind\":\"traverse\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\"}',\n expand: `{\"kind\":\"expand\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"expansions\":[{\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\",\"limit\":${CLI_LIMITS.list.default}}]}`,\n sort: `{\"kind\":\"limit\",\"input\":{\"kind\":\"sort\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]},\"limit\":${CLI_LIMITS.list.default}}`,\n page: `{\"kind\":\"page\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"pageSize\":${CLI_LIMITS.list.default}}`,\n vector: `{\"kind\":\"vector\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Product\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"vector\":\"waterproof trail shoes\",\"profile\":\"content\",\"k\":${CLI_LIMITS.search.default}}`,\n}\n\nexport const FACETS_EXAMPLE =\n '{\"query\":{\"kind\":\"start\",\"objectTypeId\":\"WorkOrder\"},\"facets\":[{\"propertyId\":\"status\",\"limit\":10}]}'\n",
10
+ "import {\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 = [\"queued\", \"running\", \"succeeded\", \"failed\", \"cancelled\"] as const\nconst WORKFLOW_RUN_STATUSES = [\n \"queued\",\n \"running\",\n \"waiting\",\n \"succeeded\",\n \"failed\",\n \"cancelled\",\n] as const\n\nexport async function runs(\n api: ApiClient,\n kind: \"action\" | \"workflow\",\n args: readonly string[]\n): Promise<void> {\n const [sub, ...rest] = args\n const group = `${kind}-runs` as \"action-runs\" | \"workflow-runs\"\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP[group])\n if (sub === \"get\") {\n const { positionals } = parseCommandArgs(rest, {}, `${group} get`, 1)\n return writeJson(await api.get(`/api/${group}/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n if (sub === \"list\") {\n const common = {\n \"--status\": \"status\",\n \"--started-after\": \"startedAfter\",\n \"--started-before\": \"startedBefore\",\n \"--limit\": \"limit\",\n \"--offset\": \"offset\",\n \"--order\": \"order\",\n }\n const action = {\n ...common,\n \"--action\": \"actionId\",\n \"--type\": \"objectTypeId\",\n \"--id\": \"primaryId\",\n }\n const workflow = { ...common, \"--workflow\": \"workflowId\" }\n const options = normalizeWindowOptions(\n parseQueryOptions(rest, kind === \"action\" ? action : workflow, `${group} list`),\n {\n defaultLimit: CLI_LIMITS.list.default,\n maximumLimit: CLI_LIMITS.list.maximum,\n defaultOrder: DEFAULT_LIST_ORDER,\n offset: true,\n }\n )\n if (options.status !== undefined) {\n options.status = enumValue(\n \"--status\",\n options.status,\n kind === \"action\" ? ACTION_RUN_STATUSES : WORKFLOW_RUN_STATUSES\n )\n }\n for (const [name, flag] of [\n [\"startedAfter\", \"--started-after\"],\n [\"startedBefore\", \"--started-before\"],\n ] as const) {\n if (options[name] !== undefined) options[name] = rfc3339Value(flag, options[name])\n }\n requireOrderedRange(\n \"--started-after\",\n options.startedAfter,\n \"--started-before\",\n options.startedBefore\n )\n return writeJson(await api.get(`/api/${group}`, options))\n }\n fail(`Unknown ${group} command '${sub}'.`)\n}\n",
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": ";;AAAA;AACA;AACA;AACA;AACA;AACA;;;ACJO,IAAM,uBAAuB;AAC7B,IAAM,aAAa;AACnB,IAAM,WAAW;AAAA;AAUjB,MAAM,iBAAiB,MAAM;AAAA,EACzB;AAAA,EACA;AAAA,EAET,WAAW,CAAC,MAAoB,WAAW,YAAY;AAAA,IACrD,MAAM,KAAK,OAAO;AAAA,IAClB,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,KAAK,WAAW;AAAA;AAEpB;AAEO,SAAS,IAAI,CAAC,SAAiB,OAAO,qBAAqB,MAAsB;AAAA,EACtF,MAAM,IAAI,SAAS,EAAE,MAAM,YAAa,OAAO,EAAE,KAAK,IAAI,CAAC,EAAG,CAAC;AAAA;AAG1D,SAAS,SAAS,CAAC,OAAsB;AAAA,EAC9C,QAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,KAAK;AAAA,CAAK;AAAA;AAG5C,SAAS,SAAS,CAAC,OAAqB;AAAA,EAC7C,QAAQ,OAAO,MAAM,MAAM,SAAS;AAAA,CAAI,IAAI,QAAQ,GAAG;AAAA,CAAS;AAAA;AAG3D,SAAS,WAAW,CAAC,OAAwB;AAAA,EAClD,MAAM,WACJ,iBAAiB,WACb,QACA,IAAI,SACF;AAAA,IACE,MAAM;AAAA,IACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AAAA,EACpD,GACA,QACF;AAAA,EACN,QAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,EAAE,OAAO,SAAS,KAAK,CAAC;AAAA,CAAK;AAAA,EACpE,OAAO,SAAS;AAAA;;;ADxCX,MAAM,UAAU;AAAA,EACZ;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA2B;AAAA,IACrC,KAAK,UAAU,QAAQ,QAAQ,QAAQ,QAAQ,EAAE;AAAA,IACjD,KAAK,gBAAgB,QAAQ;AAAA,IAC7B,KAAK,wBAAwB,QAAQ;AAAA,IACrC,KAAK,qBAAqB,QAAQ;AAAA,IAClC,KAAK,kBAAkB,QAAQ;AAAA;AAAA,OAG3B,IAAG,CAAC,MAAc,OAAwE;AAAA,IAC9F,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA,IAChC,OAAO,KAAK,KAAK,KAAK,EAAE,QAAQ,MAAM,CAAC;AAAA;AAAA,OAGnC,KAAI,CAAC,MAAc,MAAiC;AAAA,IACxD,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG;AAAA,MAC/B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA;AAAA,OAGG,OAAM,CAAC,MAAc,QAAgB,aAAwC;AAAA,IACjF,MAAM,OAAO,IAAI;AAAA,IACjB,KAAK,OAAO,QAAQ,IAAI,KAAK,CAAC,IAAI,WAAW,MAAM,SAAS,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC;AAAA,IACxF,IAAI;AAAA,MAAa,KAAK,OAAO,eAAe,WAAW;AAAA,IACvD,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,EAAE,QAAQ,QAAQ,MAAM,KAAK,CAAC;AAAA;AAAA,OAG3D,SAAQ,CACZ,MACA,QACA,OACe;AAAA,IACf,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG,EAAE,QAAQ,MAAM,CAAC;AAAA,IAC1E,MAAM,YAAY,KAAK,QAAQ,MAAM,GAAG,IAAI,SAAS,MAAM,UAAU,WAAW,OAAO;AAAA,IACvF,IAAI;AAAA,MACF,MAAM,OAAO,SAAS,OAClB,SAAS,QAAQ,SAAS,IAAqC,IAC/D,SAAS,KAAK,CAAC,CAAC;AAAA,MACpB,MAAM,SAAS,MAAM,kBAAkB,WAAW,EAAE,OAAO,KAAK,CAAC,CAAC;AAAA,MAClE,MAAM,OAAO,WAAW,MAAM;AAAA,MAC9B,OAAO,OAAO;AAAA,MACd,MAAM,GAAG,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE;AAAA,MACnD,MAAM;AAAA;AAAA;AAAA,EAIF,GAAG,CAAC,MAAc,OAA2D;AAAA,IACnF,IAAI,CAAC,KAAK;AAAA,MAAS,KAAK,KAAK,uBAAuB,qBAAqB;AAAA,IACzE,gBAAgB,IAAI;AAAA,IACpB,MAAM,MAAM,IAAI,IAAI,GAAG,KAAK,UAAU,MAAM;AAAA,IAC5C,YAAY,KAAK,UAAU,OAAO,QAAQ,SAAS,CAAC,CAAC,GAAG;AAAA,MACtD,IAAI,UAAU;AAAA,QAAW,IAAI,aAAa,IAAI,KAAK,KAAK;AAAA,IAC1D;AAAA,IACA,OAAO;AAAA;AAAA,OAGK,KAAI,CAAC,KAAU,MAAqC;AAAA,IAChE,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,IAAI;AAAA,IAC3C,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,IACjC,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,IAAI;AAAA,MACtB,MAAM;AAAA,MACN,MAAM,IAAI,SACR,EAAE,MAAM,wBAAwB,SAAS,sCAAsC,GAC/E,QACF;AAAA;AAAA;AAAA,OAIU,MAAK,CAAC,KAAU,MAAsC;AAAA,IAClE,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,MAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AAAA,MACxC,IAAI,KAAK;AAAA,QAAe,QAAQ,IAAI,iBAAiB,KAAK,aAAa;AAAA,MACvE,WAAW,MAAM,MAAM,KAAK,KAAK,MAAM,QAAQ,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,MAAM,IAAI,SACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,QACd,MAAM,KAAK;AAAA,MACb,GACA,QACF;AAAA;AAAA,IAEF,IAAI,SAAS;AAAA,MAAI,OAAO;AAAA,IAExB,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,IACjC,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,SAAS,KAAK,MAAM,IAAI;AAAA,MACxB,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,MAAM,SAAS,SAAS,MAAM;AAAA,IAC9B,MAAM,QAAQ,OAAO;AAAA,IACrB,MAAM,SAAS,SAAS,KAAK;AAAA,IAC7B,MAAM,OAAO,YAAY,QAAQ,MAAM,KAAK,YAAY,QAAQ,MAAM,KAAK;AAAA,IAC3E,MAAM,UACJ,YAAY,QAAQ,SAAS,KAC7B,YAAY,QAAQ,SAAS,MAC5B,OAAO,UAAU,WACd,QACA,yCAAyC,SAAS;AAAA,IACxD,MAAM,OAAO,YAAY,QAAQ,MAAM,KAAK,YAAY,QAAQ,MAAM;AAAA,IACtE,MAAM,SAAS,MAAM,QAAQ,OAAO,MAAM,IACtC,OAAO,SACP,MAAM,QAAQ,OAAO,MAAM,IACzB,OAAO,SACP;AAAA,IACN,MAAM,IAAI,SACR;AAAA,MACE;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB;AAAA,SACI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,SACnB,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,IAC7B,GACA,QACF;AAAA;AAEJ;AAUA,SAAS,eAAe,CAAC,MAAoB;AAAA,EAC3C,MAAM,UAAU,MAAa,KAAK,kDAAkD;AAAA,EACpF,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,GAAG;AAAA,IAAG,QAAQ;AAAA,EACvD,MAAM,cAAc,MAAM;AAAA,IACxB,IAAI;AAAA,MACF,OAAO,IAAI,IAAI,MAAM,qBAAqB;AAAA,MAC1C,MAAM;AAAA,MACN,OAAO,QAAQ;AAAA;AAAA,KAEhB;AAAA,EACH,IACE,WAAW,WAAW,yBACrB,WAAW,aAAa,UAAU,CAAC,WAAW,SAAS,WAAW,OAAO,GAC1E;AAAA,IACA,QAAQ;AAAA,EACV;AAAA;AAGF,SAAS,QAAQ,CAAC,OAAyC;AAAA,EACzD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD,CAAC;AAAA;AAGP,SAAS,WAAW,CAAC,QAA2C,KAAiC;AAAA,EAC/F,MAAM,QAAQ,OAAO;AAAA,EACrB,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;;AE1KtC,SAAS,gBAA6C,CAC3D,MACA,OACA,SACA,kBAAsD,GAItD;AAAA,EACA,MAAM,cAAwB,CAAC;AAAA,EAC/B,MAAM,UAA4C,CAAC;AAAA,EACnD,IAAI,iBAAiB;AAAA,EACrB,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS;AAAA,IAChD,MAAM,WAAW,KAAK,UAAU;AAAA,IAChC,IAAI,CAAC,kBAAkB,aAAa,MAAM;AAAA,MACxC,iBAAiB;AAAA,MACjB;AAAA,IACF;AAAA,IACA,IAAI,kBAAkB,CAAC,SAAS,WAAW,GAAG,KAAK,aAAa,KAAK;AAAA,MACnE,YAAY,KAAK,QAAQ;AAAA,MACzB;AAAA,IACF;AAAA,IACA,MAAM,SAAS,SAAS,QAAQ,GAAG;AAAA,IACnC,MAAM,OAAO,SAAS,IAAI,WAAW,SAAS,MAAM,GAAG,MAAM;AAAA,IAC7D,IAAI,CAAC,OAAO,OAAO,OAAO,IAAI;AAAA,MAAG,KAAK,WAAW,mBAAmB,QAAQ;AAAA,IAC5E,IAAI,OAAO,OAAO,SAAS,IAAI;AAAA,MAAG,KAAK,GAAG,iCAAiC;AAAA,IAC3E,IAAI,MAAM,UAAU,WAAW;AAAA,MAC7B,IAAI,UAAU;AAAA,QAAG,KAAK,GAAG,+BAA+B;AAAA,MACxD,QAAQ,QAAQ;AAAA,IAClB,EAAO;AAAA,MACL,MAAM,QAAQ,SAAS,IAAI,KAAK,EAAE,SAAS,SAAS,MAAM,SAAS,CAAC;AAAA,MACpE,IAAI,CAAC,SAAU,SAAS,KAAK,MAAM,WAAW,IAAI,GAAI;AAAA,QACpD,KAAK,GAAG,wBAAwB;AAAA,MAClC;AAAA,MACA,QAAQ,QAAQ;AAAA;AAAA,EAEpB;AAAA,EACA,OAAO,SAAS,WACd,OAAO,oBAAoB,WAAW,CAAC,iBAAiB,eAAe,IAAI;AAAA,EAC7E,IAAI,YAAY,SAAS,WAAW,YAAY,SAAS,SAAS;AAAA,IAChE,KAAK,0BAA0B,WAAW;AAAA,EAC5C;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IAEA;AAAA,EACF;AAAA;AAGK,SAAS,YAAY,CAAC,MAAkC;AAAA,EAC7D,MAAM,YAAY,KAAK,QAAQ,IAAI;AAAA,EACnC,MAAM,kBAAkB,YAAY,IAAI,OAAO,KAAK,MAAM,GAAG,SAAS;AAAA,EACtE,OAAO,OAAO,KAAK,EAAE,KAAK,gBAAgB,SAAS,QAAQ,KAAK,gBAAgB,SAAS,IAAI;AAAA;AAK/F,IAAM,oBAAoB;AAEnB,SAAS,MAAM,CAAC,OAAoC;AAAA,EACzD,OAAO,UAAU,QAAQ,UAAU,YAAY,UAAU;AAAA;AAGpD,SAAS,YAAY,CAAC,MAAyB,OAAe,SAAuB;AAAA,EAC1F,IAAI,KAAK,WAAW;AAAA,IAAO,KAAK,OAAO;AAAA;AAGlC,SAAS,cAAc,CAC5B,MACA,OACA,SACA,SACQ;AAAA,EACR,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG;AAAA,IAC3B,KAAK,GAAG,gCAAgC,mBAAmB,UAAU;AAAA,EACvE;AAAA,EACA,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,WAAW,SAAS,SAAS;AAAA,IACzE,KAAK,GAAG,gCAAgC,mBAAmB,UAAU;AAAA,EACvE;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,MAAc,OAAuB;AAAA,EACtE,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG;AAAA,IAC3B,KAAK,GAAG,sCAAsC;AAAA,EAChD;AAAA,EACA,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,CAAC,OAAO,cAAc,MAAM,GAAG;AAAA,IACjC,KAAK,GAAG,2CAA2C;AAAA,EACrD;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,MAAc,OAAuB;AAAA,EAChE,IAAI,CAAC,kBAAkB,KAAK,KAAK,KAAK,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG;AAAA,IACrE,KAAK,GAAG,qCAAqC;AAAA,EAC/C;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,mBAAmB,CACjC,WACA,OACA,YACA,QACM;AAAA,EACN,IAAI,SAAS,UAAU,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,MAAM,GAAG;AAAA,IAC7D,KAAK,GAAG,wCAAwC,aAAa;AAAA,EAC/D;AAAA;AAGK,SAAS,SAA4C,CAC1D,MACA,OACA,SACW;AAAA,EACX,IAAI,CAAC,QAAQ,SAAS,KAAK;AAAA,IAAG,KAAK,GAAG,gBAAgB,mBAAmB,OAAO,IAAI;AAAA,EACpF,OAAO;AAAA;AAGT,SAAS,kBAAkB,CAAC,QAAmC;AAAA,EAC7D,IAAI,OAAO,SAAS;AAAA,IAAG,OAAO,OAAO,MAAM;AAAA,EAC3C,OAAO,GAAG,OAAO,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI,SAAS,OAAO,GAAG,EAAE;AAAA;;AC/HvD,IAAM,aAAa;AAAA,EACxB,MAAM,EAAE,SAAS,IAAI,SAAS,KAAM;AAAA,EACpC,QAAQ,EAAE,SAAS,IAAI,SAAS,GAAG;AAAA,EAEnC,kBAAkB,EAAE,SAAS,KAAM;AAAA,EACnC,kBAAkB,EAAE,SAAS,KAAK,SAAS,KAAM;AAAA,EACjD,UAAU,EAAE,SAAS,KAAK,SAAS,KAAM;AAAA,EACzC,SAAS;AAAA,IACP,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE;AAAA,IAChC,SAAS,EAAE,SAAS,IAAI,SAAS,IAAI;AAAA,IACrC,OAAO,EAAE,SAAS,IAAI,SAAS,IAAI;AAAA,IACnC,cAAc;AAAA,EAChB;AACF;AAEO,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;;;ACXvC,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiD1B,IAAM,kBAAkB,kBAAkB,QAAQ,kBAAkB,mBAAmB,EACpF,QACC,qGACA,kEACF,EACC,QACC;AAAA;AAAA,GACA,EACF,EACC,QACC;AAAA;AAAA;AAAA,GACA,EACF;AAEK,SAAS,kBAAkB,CAAC,MAAmC;AAAA,EACpE,OAAO,SAAS,YAAY,oBAAoB;AAAA;AAGlD,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAMhB,IAAM,cAAc;AAAA,2CACgB,WAAW,OAAO;AAAA,0FAC6B,WAAW,OAAO;AAAA;AAAA,sBAEtF,WAAW,OAAO;AAAA;AAAA;AAAA,EAGtC;AAEK,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAeb,WAAW,KAAK,2CAA2C,WAAW,KAAK;AAAA;AAAA,0DAEhC;AAAA,oDACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOrC,WAAW,OAAO,6CAA6C,WAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAO7E,WAAW,SAAS,uCAAuC,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,eAKnF,WAAW,QAAQ,MAAM,8CAA8C,WAAW,QAAQ,MAAM;AAAA,qBAC1F,WAAW,QAAQ,QAAQ,sCAAsC,WAAW,QAAQ,QAAQ;AAAA,mBAC9F,WAAW,QAAQ,MAAM,wCAAwC,WAAW,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3G;AAAA;AAAA;AAAA;AAKK,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sDAe4B,WAAW,KAAK;AAAA,wDACd,WAAW,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BjE,IAAM,aAAa;AAAA,EACxB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA;AAAA;AAAA,EAGV,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQE,WAAW,iBAAiB,yCAAyC,WAAW,iBAAiB;AAAA,qEAC3C;AAAA,EACnE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAUF,WAAW,KAAK,qCAAqC,WAAW,KAAK;AAAA;AAAA,kEAElB;AAAA,EAChE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIP,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQJ,WAAW,KAAK,qCAAqC,WAAW,KAAK;AAAA;AAAA,kEAElB;AAClE;AAEO,IAAM,iBAAmD;AAAA,EAC9D,OACE;AAAA,EACF,QAAQ,uKAAuK,WAAW,KAAK;AAAA,EAC/L,KAAK,mQAAmQ,WAAW,KAAK;AAAA,EACxR,KAAK,4LAA4L,WAAW,KAAK;AAAA,EACjN,IAAI,kLAAkL,WAAW,KAAK;AAAA,EACtM,QAAQ,gLAAgL,WAAW,KAAK;AAAA,EACxM,SAAS,wGAAwG,WAAW,KAAK;AAAA,EACjI,UACE;AAAA,EACF,QAAQ,0OAA0O,WAAW,KAAK;AAAA,EAClQ,MAAM,2KAA2K,WAAW,KAAK;AAAA,EACjM,MAAM,gFAAgF,WAAW,KAAK;AAAA,EACtG,QAAQ,yNAAyN,WAAW,OAAO;AACrP;AAEO,IAAM,iBACX;;;ACzQF,qBAAS;AAQF,SAAS,iBAAiB,CAC/B,MACA,OACA,SACc;AAAA,EACd,MAAM,QAAQ,OAAO,YAAY,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,QAAiB,CAAC,CAAC;AAAA,EAC5F,QAAQ,YAAY,iBAAiB,MAAM,OAAO,OAAO;AAAA,EACzD,MAAM,QAAsB,CAAC;AAAA,EAC7B,YAAY,MAAM,UAAU,OAAO,QAAQ,OAAO,GAAG;AAAA,IACnD,MAAM,OAAO,MAAM;AAAA,IACnB,IAAI;AAAA,MAAM,MAAM,QAAQ;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,sBAAsB,CACpC,SACA,QAMc;AAAA,EACd,MAAM,aAA2B;AAAA,OAC5B;AAAA,IACH,OAAO,OACL,eACE,WACA,QAAQ,SAAS,OAAO,OAAO,YAAY,GAC3C,GACA,OAAO,YACT,CACF;AAAA,IACA,OAAO,UAAU,WAAW,QAAQ,SAAS,OAAO,cAAc,CAAC,OAAO,MAAM,CAAC;AAAA,EACnF;AAAA,EACA,IAAI,OAAO,UAAU,QAAQ,WAAW,WAAW;AAAA,IACjD,WAAW,SAAS,OAAO,mBAAmB,YAAY,QAAQ,MAAM,CAAC;AAAA,EAC3E;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAAC,MAAyB,SAAyB;AAAA,EACjF,QAAQ,YAAY,iBAAiB,MAAM,EAAE,UAAU,SAAS,GAAG,OAAO;AAAA,EAC1E,IAAI,CAAC,QAAQ;AAAA,IAAW,KAAK,GAAG,mCAAmC;AAAA,EACnE,OAAO,QAAQ;AAAA;AAGjB,eAAsB,QAAQ,CAAC,QAAkC;AAAA,EAC/D,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,WAAW,MAAM,MAAM,UAAU,IAAI,MAAM,UAAS,QAAQ,MAAM;AAAA,IACzE,OAAO,OAAO;AAAA,IACd,IAAI,YAAY,OAAO,QAAQ;AAAA,MAAG,KAAK,cAAc,yBAAyB;AAAA,IAC9E,MAAM;AAAA;AAAA,EAER,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,IAAI;AAAA,IACtB,MAAM;AAAA,IACN,KACE,WAAW,MACP,sCACA,cAAc,8BAClB,cACF;AAAA;AAAA;AAIG,SAAS,SAAQ,CAAC,OAAyC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD,CAAC;AAAA;AAGA,SAAS,SAAS,CAAC,OAA2C;AAAA,EACnE,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,SAAQ,IAAI,CAAC;AAAA;AAIhD,SAAS,kBAAkB,CAAC,YAA+C;AAAA,EAChF,OAAO,OAAO,KAAK,UAAS,UAAS,WAAW,MAAM,EAAE,OAAO,CAAC;AAAA;AAG3D,SAAS,WAAW,CAAC,OAAgB,MAA8C;AAAA,EACxF,OAAO,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;AAAA;AAGrE,eAAe,SAAS,GAAoB;AAAA,EAC1C,MAAM,SAAuB,CAAC;AAAA,EAC9B,iBAAiB,SAAS,QAAQ,OAAO;AAAA,IACvC,OAAO,KAAK,OAAO,UAAU,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI,KAAK;AAAA,EACjF;AAAA,EACA,OAAO,IAAI,YAAY,EAAE,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA;;;AC9FvD,eAAsB,OAAO,CAAC,KAAgB,MAAwC;AAAA,EACpF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW,OAAO;AAAA,EAClF,IAAI,QAAQ,OAAO;AAAA,IACjB,QAAQ,gBAAgB,iBAAiB,MAAM,CAAC,GAAG,eAAe,CAAC;AAAA,IACnE,OAAO,UAAU,MAAM,IAAI,IAAI,gBAAgB,mBAAmB,YAAY,MAAM,EAAE,GAAG,CAAC;AAAA,EAC5F;AAAA,EACA,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,UAAU,kBAAkB,MAAM,EAAE,UAAU,eAAe,GAAG,cAAc;AAAA,IACpF,MAAM,WAAW,MAAM,IAAI,IAAI,cAAc;AAAA,IAC7C,IAAI,CAAC,QAAQ;AAAA,MAAc,OAAO,UAAU,QAAQ;AAAA,IACpD,IAAI,CAAC,MAAM,QAAQ,QAAQ;AAAA,MAAG,KAAK,+CAA+C;AAAA,IAClF,OAAO,UACL,SAAS,OAAO,CAAC,UAAU,UAAS,KAAK,EAAE,iBAAiB,QAAQ,YAAY,CAClF;AAAA,EACF;AAAA,EACA,IAAI,QAAQ,WAAW;AAAA,IACrB,QAAQ,aAAa,YAAY,iBAC/B,MACA;AAAA,MACE,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,GACA,mBACA,CACF;AAAA,IACA,MAAM,WAAW,YAAY,MAAM;AAAA,IACnC,MAAM,cAAc,QAAQ;AAAA,IAC5B,MAAM,YAAY,QAAQ;AAAA,IAC1B,MAAM,eAAe,QAAQ;AAAA,IAC7B,MAAM,QAAQ,QAAQ;AAAA,IACtB,MAAM,OAAO,QAAQ;AAAA,IACrB,IAAI,QAAQ,WAAW,MAAM,QAAQ,SAAS,GAAG;AAAA,MAC/C,KAAK,4DAA4D;AAAA,IACnE;AAAA,IACA,MAAM,SAAS,eAAe,MAAM,SAAS,YAAY,IAAI,CAAC;AAAA,IAC9D,IAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,YAAY,WAAW,MAAM;AAAA,MAC1E,KAAK,sCAAsC;AAAA,IAC7C;AAAA,IACA,MAAM,YAAY,MAAM,IAAI,KAAK,gBAAgB,mBAAmB,QAAQ,KAAK;AAAA,MAC/E;AAAA,SACI,eAAe,YACf,EAAE,SAAS,EAAE,MAAM,UAAU,cAAc,aAAa,WAAW,UAAU,EAAE,IAC/E,CAAC;AAAA,SACD,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IAC3B,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAM,OAAO,UAAU,SAAS;AAAA,IAErC,MAAM,iBAAiB,UAAS,SAAS,EAAE;AAAA,IAC3C,IAAI,OAAO,mBAAmB,YAAY,eAAe,WAAW,GAAG;AAAA,MACrE,MAAM,IAAI,SACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX,GACA,QACF;AAAA,IACF;AAAA,IACA,OAAO,UAAU,MAAM,iBAAiB,KAAK,cAAc,CAAC;AAAA,EAC9D;AAAA,EACA,KAAK,4BAA4B,OAAO;AAAA;AAG1C,IAAM,yBAAyB;AAC/B,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B,IAAI,IAAI,CAAC,aAAa,UAAU,WAAW,CAAC;AAE7E,eAAe,gBAAgB,CAAC,KAAgB,OAAiC;AAAA,EAC/E,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,OAAO,KAAK,IAAI,IAAI,YAAY,wBAAwB;AAAA,IACtD,MAAM,MAAM,MAAM,IAAI,IAAI,oBAAoB,mBAAmB,KAAK,GAAG;AAAA,IACzE,MAAM,SAAS,UAAS,GAAG,EAAE;AAAA,IAC7B,IAAI,OAAO,WAAW,YAAY,yBAAyB,IAAI,MAAM;AAAA,MAAG,OAAO;AAAA,IAC/E,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,mBAAmB,CAAC;AAAA,EACzE;AAAA,EAEA,MAAM,IAAI,SACR;AAAA,IACE,MAAM;AAAA,IACN,SAAS,eAAe,gCAAgC,yBAAyB;AAAA,IACjF,MAAM,yCAAyC;AAAA,EACjD,GACA,QACF;AAAA;;;AC5FF;AAMA,eAAsB,KAAK,CAAC,KAAgB,MAAwC;AAAA,EAClF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW,KAAK;AAAA,EAChF,IAAI,QAAQ,UAAU;AAAA,IACpB,QAAQ,aAAa,YAAY,iBAC/B,MACA,EAAE,kBAAkB,SAAS,GAC7B,gBACA,CACF;AAAA,IACA,MAAM,SAAS,YAAY,MAAM;AAAA,IACjC,IAAI;AAAA,MACF,MAAM,OAAO,MAAM;AAAA,MACnB,MAAM;AAAA,MACN,KAAK,gBAAgB,yBAAyB;AAAA;AAAA,IAEhD,OAAO,UAAU,MAAM,IAAI,OAAO,cAAc,QAAQ,QAAQ,iBAAiB,CAAC;AAAA,EACpF;AAAA,EACA,IAAI,QAAQ,YAAY;AAAA,IACtB,QAAQ,aAAa,YAAY,iBAC/B,MACA,EAAE,UAAU,UAAU,YAAY,SAAS,GAC3C,kBACA,CAAC,GAAG,CAAC,CACP;AAAA,IACA,MAAM,UAAU,YAAY;AAAA,IAC5B,IAAI;AAAA,IACJ,IAAI,YAAY,UAAU;AAAA,MACxB,aAAa,aAAa,GAAG,4DAA4D;AAAA,MACzF,MAAM,OAAO,YAAY,MAAM;AAAA,MAC/B,MAAM,KAAK,YAAY,MAAM;AAAA,MAC7B,QAAQ,gBAAgB,mBAAmB,IAAI,KAAK,mBAAmB,EAAE;AAAA,IAC3E,EAAO,SAAI,YAAY,gBAAgB,YAAY,gBAAgB;AAAA,MACjE,aAAa,aAAa,GAAG,kBAAkB,sCAAsC;AAAA,MACrF,MAAM,KAAK,YAAY,MAAM;AAAA,MAC7B,QAAQ,QAAQ,YAAY,mBAAmB,EAAE;AAAA,IACnD,EAAO;AAAA,WAAK,kCAAkC,WAAW;AAAA,IACzD,MAAM,OAAO,QAAQ;AAAA,IACrB,MAAM,SAAS,QAAQ;AAAA,IACvB,IAAI,CAAC;AAAA,MAAM,KAAK,gDAAgD;AAAA,IAChE,IAAI,CAAC;AAAA,MAAQ,KAAK,gDAAgD;AAAA,IAClE,MAAM,IAAI,SAAS,OAAO,QAAQ,EAAE,KAAK,CAAC;AAAA,IAC1C,OAAO,UAAU,EAAE,YAAY,MAAM,OAAO,CAAC;AAAA,EAC/C;AAAA,EACA,KAAK,0BAA0B,OAAO;AAAA;;;ACDxC,eAAsB,YAAY,CAChC,KACA,cACA,WACA,SACkB;AAAA,EAClB,IAAI,QAAQ,UAAU;AAAA,IAAG,OAAO,YAAY,KAAK,cAAc,WAAW,OAAO;AAAA,EAEjF,IAAI,OAAqB,CAAC,EAAE,cAAc,WAAW,UAAU,EAAE,CAAC;AAAA,EAClE,IAAI,WAAW;AAAA,EACf,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,mBAAmB;AAAA,EACvB,IAAI,iBAAiB;AAAA,EACrB,IAAI,iBAAiB;AAAA,EACrB,IAAI,YAAY;AAAA,EAChB,IAAI,gBAAgB;AAAA,EAEpB,SAAS,QAAQ,EAAG,QAAQ,QAAQ,SAAS,SAAS,SAAS,GAAG,SAAS,GAAG;AAAA,IAC5E,MAAM,eAAe,IAAI;AAAA,IACzB,MAAM,aAAa,IAAI;AAAA,IACvB,MAAM,iBAAiB,IAAI;AAAA,IAC3B,IAAI;AAAA,IACJ,IAAI,iBAAiB;AAAA,IAErB,OAAO,gBAAgB;AAAA,MACrB,MAAM,iBAAiB,QAAQ,WAAW;AAAA,MAC1C,IAAI,kBAAkB,GAAG;AAAA,QACvB,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,IAAI,aAAa,WAAW,QAAQ,cAAc;AAAA,QAChD,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,MAAM,WAAW,gBACf,MAAM,IAAI,KAAK,4BAA4B;AAAA,QACzC,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,SAAS,IAAI,GAAG,cAAc,MAAM,WAAW,UAAU;AAAA,YAC7D,cAAc;AAAA,YACd,WAAW;AAAA,UACb,EAAE;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,UAAU,KAAK,IAAI,WAAW,SAAS,SAAS,cAAc;AAAA,WAC1D,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MACnC,CAAC,CACH;AAAA,MACA,aAAa;AAAA,MACb,MAAM,YAAY,SAAS,MAAM,MAAM,GAAG,cAAc;AAAA,MACxD,iBAAiB,UAAU;AAAA,MAC3B,mBAAmB,SAAS,MAAM,SAAS,UAAU;AAAA,MACrD,MAAM,kBAAkB,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC;AAAA,MACpD,WAAW,QAAQ,WAAW;AAAA,QAC5B,gBAAgB,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,QACvC,gBAAgB,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,MACzC;AAAA,MACA,WAAW,UAAU,SAAS,SAAS;AAAA,QACrC,IAAI,gBAAgB,IAAI,OAAO,MAAM,CAAC;AAAA,UAAG,aAAa,IAAI,OAAO,MAAM,GAAG,MAAM;AAAA,MAClF;AAAA,MACA,WAAW,QAAQ,WAAW;AAAA,QAC5B,MAAM,WAAW;AAAA,UACf,cAAc,KAAK,OAAO;AAAA,UAC1B,UAAU,KAAK,OAAO;AAAA,UACtB,QAAQ,KAAK;AAAA,UACb,cAAc,KAAK,OAAO;AAAA,UAC1B,UAAU,KAAK,OAAO;AAAA,aAClB,OAAO,OAAO,MAAM,YAAY,IAAI,EAAE,YAAY,KAAK,WAAW,IAAI,CAAC;AAAA,QAC7E;AAAA,QACA,WAAW,IAAI,QAAQ,QAAQ,GAAG,QAAQ;AAAA,MAC5C;AAAA,MACA,IAAI,CAAC,SAAS,SAAS;AAAA,QACrB,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,IAAI,iBAAiB,QAAQ,UAAU;AAAA,QACrC,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,IAAI,aAAa,WAAW,QAAQ,cAAc;AAAA,QAChD,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,IAAI,CAAC,SAAS,eAAe;AAAA,QAC3B,mBAAmB,qEAAqE;AAAA,MAC1F;AAAA,MACA,IAAI,eAAe,IAAI,SAAS,aAAa,GAAG;AAAA,QAC9C,mBACE,2EACF;AAAA,MACF;AAAA,MACA,eAAe,IAAI,SAAS,aAAa;AAAA,MACzC,YAAY,SAAS;AAAA,IACvB;AAAA,IAEA,YAAY,KAAK,WAAW;AAAA,MAAc,QAAQ,IAAI,KAAK,MAAM;AAAA,IACjE,YAAY,KAAK,SAAS;AAAA,MAAY,MAAM,IAAI,KAAK,IAAI;AAAA,IAEzD,MAAM,eAAe,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC;AAAA,IACjD,MAAM,aAA2B,CAAC;AAAA,IAClC,WAAW,QAAQ,WAAW,OAAO,GAAG;AAAA,MACtC,MAAM,SAAS,EAAE,cAAc,KAAK,cAAc,WAAW,KAAK,SAAS;AAAA,MAC3E,MAAM,SAAS,EAAE,cAAc,KAAK,cAAc,WAAW,KAAK,SAAS;AAAA,MAC3E,IAAI,aAAa,IAAI,OAAO,MAAM,CAAC;AAAA,QAAG,WAAW,KAAK,KAAK,QAAQ,UAAU,QAAQ,EAAE,CAAC;AAAA,MACnF,SAAI,aAAa,IAAI,OAAO,MAAM,CAAC;AAAA,QAAG,WAAW,KAAK,KAAK,QAAQ,UAAU,QAAQ,EAAE,CAAC;AAAA,IAC/F;AAAA,IAEA,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAAA,IACrC,MAAM,MAAM,WAAW,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC;AAAA,IAC/C,qBAAqB,IAAI,SAAS,QAAQ;AAAA,IAC1C,OAAO,IAAI,MAAM,GAAG,QAAQ,UAAU;AAAA,IACtC,WAAW,kBAAkB,iBAAiB,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;AAAA,EAChG;AAAA,EAEA,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAAA,EACrC,MAAM,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,EACrC,OACC,CAAC,SACC,KAAK,IAAI,OAAO,EAAE,cAAc,KAAK,cAAc,WAAW,KAAK,SAAS,CAAC,CAAC,KAC9E,KAAK,IAAI,OAAO,EAAE,cAAc,KAAK,cAAc,WAAW,KAAK,SAAS,CAAC,CAAC,CAClF,EACC,KAAK,YAAY,EACjB,IAAI,CAAC,SACJ,KAAK,cAAc,OACf;AAAA,IACE,cAAc,KAAK;AAAA,IACnB,UAAU,KAAK;AAAA,IACf,QAAQ,KAAK;AAAA,IACb,cAAc,KAAK;AAAA,IACnB,UAAU,KAAK;AAAA,EACjB,IACA,IACN;AAAA,EAEF,MAAM,OAAO,QAAQ,IAAI,OAAO,EAAE,cAAc,UAAU,CAAC,CAAC;AAAA,EAC5D,IAAI,CAAC;AAAA,IAAM,eAAe,cAAc,SAAS;AAAA,EACjD,MAAM,iBAAiB,KACpB,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,EAChC,QAAQ,CAAC,QAAQ;AAAA,IAChB,MAAM,SAAS,QAAQ,IAAI,OAAO,GAAG,CAAC;AAAA,IACtC,OAAO,SAAS,CAAC,KAAK,QAAQ,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC;AAAA,GAC5D;AAAA,EAEH,MAAM,cAAc,QAAQ,OACxB,MAAM,QAAQ,IACZ,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,EAC7C,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC,EAC/C,IAAI,CAAC,WAAW,IAAI,IAAI,qBAAqB,mBAAmB,MAAM,GAAG,CAAC,CAC/E,IACA;AAAA,EAEJ,OAAO;AAAA,IACL,QAAQ,QAAQ,OAAO,OAAO,cAAc,IAAI;AAAA,IAChD,gBAAgB,QAAQ,OAAO,iBAAiB,eAAe,IAAI,aAAa;AAAA,IAChF,OAAO;AAAA,IACP,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,UAAU,QAAQ;AAAA,MAClB,UAAU,WAAW,QAAQ;AAAA,MAC7B,aAAa,IAAI,eAAe;AAAA,MAChC,WAAW,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA,WAAW,oBAAoB,kBAAkB;AAAA,MACjD,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,OACI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,EACvC;AAAA;AAGF,eAAe,WAAW,CACxB,KACA,cACA,WACA,SACkB;AAAA,EAClB,MAAM,WAAW,MAAM,IAAI,KAAK,sBAAsB;AAAA,IACpD,OAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,EAAE,cAAc,UAAU,CAAC,EAAE;AAAA,IAC3D,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,IAAI,OAAO,aAAa,YAAY,aAAa,QAAQ,MAAM,QAAQ,QAAQ,GAAG;AAAA,IAChF,mBAAmB,oDAAoD;AAAA,EACzE;AAAA,EACA,MAAM,OAAQ,SAAqC;AAAA,EACnD,IAAI,CAAC,MAAM,QAAQ,IAAI;AAAA,IAAG,mBAAmB,oDAAoD;AAAA,EACjG,MAAM,OAAO,KAAK,KAChB,CAAC,UACC,qBAAqB,KAAK,KAC1B,MAAM,iBAAiB,gBACvB,MAAM,cAAc,SACxB;AAAA,EACA,IAAI,CAAC;AAAA,IAAM,eAAe,cAAc,SAAS;AAAA,EACjD,MAAM,cAAc,QAAQ,OACxB,CAAC,MAAM,IAAI,IAAI,qBAAqB,mBAAmB,YAAY,GAAG,CAAC,IACvE;AAAA,EACJ,OAAO;AAAA,IACL,QAAQ,QAAQ,OAAO,OAAO,cAAc,IAAI;AAAA,IAChD,gBAAgB,CAAC;AAAA,IACjB,OAAO,CAAC;AAAA,IACR,OAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY,QAAQ;AAAA,MACpB,UAAU,QAAQ;AAAA,MAClB,UAAU,WAAW,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,WAAW;AAAA,MACX,WAAW;AAAA,MACX,eAAe;AAAA,MACf,WAAW;AAAA,MACX,YAAY,EAAE,SAAS,OAAO,OAAO,OAAO,OAAO,MAAM;AAAA,IAC3D;AAAA,OACI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,EACvC;AAAA;AAGF,SAAS,eAAe,CAAC,OAA+B;AAAA,EACtD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,qBAAqB;AAAA,EAC9F,MAAM,SAAS;AAAA,EACf,IAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,CAAC,MAAM,QAAQ,OAAO,KAAK;AAAA,IAAG,qBAAqB;AAAA,EACzF,IAAI,OAAO,OAAO,YAAY;AAAA,IAAW,qBAAqB;AAAA,EAC9D,IAAI,OAAO,kBAAkB,aAAa,OAAO,OAAO,kBAAkB,UAAU;AAAA,IAClF,qBAAqB;AAAA,EACvB;AAAA,EACA,IAAI,CAAC,OAAO,QAAQ,MAAM,oBAAoB,KAAK,CAAC,OAAO,MAAM,MAAM,sBAAsB,GAAG;AAAA,IAC9F,qBAAqB;AAAA,EACvB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,oBAAoB,GAAU;AAAA,EACrC,mBAAmB,oDAAoD;AAAA;AAGzE,SAAS,kBAAkB,CAAC,SAAwB;AAAA,EAClD,MAAM,IAAI,SAAS,EAAE,MAAM,wBAAwB,QAAQ,GAAG,QAAQ;AAAA;AAGxE,SAAS,cAAc,CAAC,cAAsB,WAA0B;AAAA,EACtE,MAAM,IAAI,SACR,EAAE,MAAM,aAAa,SAAS,WAAW,gBAAgB,4BAA4B,GACrF,QACF;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAA6C;AAAA,EACzE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,SAAS;AAAA,EACf,OAAO,OAAO,OAAO,iBAAiB,YAAY,OAAO,OAAO,cAAc;AAAA;AAGhF,SAAS,sBAAsB,CAAC,OAAyD;AAAA,EACvF,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,SAAS;AAAA,EACf,OACE,OAAO,OAAO,WAAW,YAAY,YAAY,OAAO,MAAM,KAAK,YAAY,OAAO,MAAM;AAAA;AAIhG,SAAS,WAAW,CAAC,OAAoC;AAAA,EACvD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,SAAS;AAAA,EACf,OAAO,OAAO,OAAO,iBAAiB,YAAY,OAAO,OAAO,cAAc;AAAA;AAGhF,SAAS,aAA2C,CAClD,QACoC;AAAA,EACpC,QAAQ,WAAW,YAAY,WAAW,eAAe,YAAY;AAAA,EACrE,OAAO;AAAA;AAGT,SAAS,UAAU,CAAC,QAAoC;AAAA,EACtD,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,MAAM,OAAO,KAAK;AAAA,IACxB,MAAM,UAAU,OAAO,IAAI,GAAG;AAAA,IAC9B,IAAI,CAAC,WAAW,MAAM,WAAW,QAAQ;AAAA,MAAU,OAAO,IAAI,KAAK,KAAK;AAAA,EAC1E;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,KAC1B,CAAC,MAAM,UACL,KAAK,WAAW,MAAM,YACtB,KAAK,aAAa,cAAc,MAAM,YAAY,KAClD,KAAK,UAAU,cAAc,MAAM,SAAS,CAChD;AAAA;AAGF,SAAS,MAAM,CAAC,KAAwB;AAAA,EACtC,OAAO,KAAK,UAAU,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA;AAGzD,SAAS,OAAO,CAAC,MAA4B;AAAA,EAC3C,OAAO,KAAK,UAAU;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP,CAAC;AAAA;AAGH,SAAS,YAAY,CAAC,MAAoB,OAA6B;AAAA,EACrE,OAAO,QAAQ,IAAI,EAAE,cAAc,QAAQ,KAAK,CAAC;AAAA;;;AC9UnD,eAAsB,OAAO,CAAC,KAAgB,MAAwC;AAAA,EACpF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG;AAAA,IAAG,OAAO,UAAU,YAAY;AAAA,EACtD,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,eAAe,KAAK,IAAI;AAAA,SAC5B;AAAA,MACH,OAAO,YAAY,KAAK,IAAI;AAAA,SACzB;AAAA,MACH,OAAO,WAAW,KAAK,IAAI;AAAA,SACxB;AAAA,MACH,OAAO,cAAc,KAAK,IAAI;AAAA,SAC3B;AAAA,MACH,OAAO,aAAa,KAAK,IAAI;AAAA,SAC1B;AAAA,SACA;AAAA,MACH,OAAO,cAAc,KAAK,KAAK,IAAI;AAAA,SAChC;AAAA,MACH,OAAO,cAAc,KAAK,IAAI;AAAA,SAC3B;AAAA,MACH,OAAO,aAAa,KAAK,IAAI;AAAA;AAAA,MAE7B,KAAK,4BAA4B,OAAO;AAAA;AAAA;AAI9C,eAAe,cAAc,CAAC,KAAgB,MAAwC;AAAA,EACpF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,YAAY;AAAA,EACrD,QAAQ,aAAa,YAAY,iBAC/B,MACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,eAAe;AAAA,EACjB,GACA,mBACA,CACF;AAAA,EACA,MAAM,eAAe,YAAY,MAAM;AAAA,EACvC,MAAM,YAAY,YAAY,MAAM;AAAA,EACpC,MAAM,QAAQ,eACZ,WACA,QAAQ,cAAc,OAAO,WAAW,QAAQ,MAAM,OAAO,GAC7D,GACA,WAAW,QAAQ,MAAM,OAC3B;AAAA,EACA,MAAM,aAAa,eACjB,iBACA,QAAQ,oBAAoB,OAAO,WAAW,QAAQ,QAAQ,OAAO,GACrE,GACA,WAAW,QAAQ,QAAQ,OAC7B;AAAA,EACA,MAAM,WAAW,eACf,eACA,QAAQ,kBAAkB,OAAO,WAAW,QAAQ,MAAM,OAAO,GACjE,GACA,WAAW,QAAQ,MAAM,OAC3B;AAAA,EACA,MAAM,OAAO,QAAQ,aAAa;AAAA,EAClC,UACE,MAAM,aAAa,KAAK,cAAc,WAAW;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,CACH;AAAA;AAGF,eAAe,WAAW,CAAC,KAAgB,MAAwC;AAAA,EACjF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,YAAY;AAAA,EACrD,MAAM,cAAsC;AAAA,IAC1C,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,eAAe;AAAA,IACf,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EACtB;AAAA,EACA,MAAM,UAAU,uBAAuB,kBAAkB,MAAM,aAAa,cAAc,GAAG;AAAA,IAC3F,cAAc,WAAW,KAAK;AAAA,IAC9B,cAAc,WAAW,KAAK;AAAA,IAC9B,cAAc;AAAA,IACd,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,QAAQ,UAAU,UAAU,cAAc,QAAQ,WAAW,yBAAyB;AAAA,IACpF;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,YAAY,MAAM,SAAS;AAAA,IACzB,CAAC,gBAAgB,iBAAiB;AAAA,IAClC,CAAC,iBAAiB,kBAAkB;AAAA,IACpC,CAAC,gBAAgB,iBAAiB;AAAA,IAClC,CAAC,iBAAiB,kBAAkB;AAAA,EACtC,GAAY;AAAA,IACV,IAAI,QAAQ,UAAU;AAAA,MAAW,QAAQ,QAAQ,aAAa,MAAM,QAAQ,KAAK;AAAA,EACnF;AAAA,EACA,oBACE,mBACA,QAAQ,cACR,oBACA,QAAQ,aACV;AAAA,EACA,oBACE,mBACA,QAAQ,cACR,oBACA,QAAQ,aACV;AAAA,EACA,UAAU,MAAM,IAAI,IAAI,gBAAgB,OAAO,CAAC;AAAA;AAGlD,eAAe,UAAU,CAAC,KAAgB,MAAwC;AAAA,EAChF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,uDAAuD;AAAA,EAChG,QAAQ,gBAAgB,iBAAiB,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,OAAO,iBAAiB,CAAC;AAAA,EAC/F,MAAM,eAAe,YAAY,MAAM;AAAA,EACvC,UACE,MAAM,IAAI,KAAK,sBAAsB;AAAA,IACnC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,YAAY,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,UAAU,EAAE;AAAA,IAC7E;AAAA,IACA,cAAc;AAAA,EAChB,CAAC,CACH;AAAA;AAGF,eAAe,aAAa,CAAC,KAAgB,MAAwC;AAAA,EACnF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW;AAAA,EACpD,QAAQ,aAAa,YAAY,iBAC/B,MACA,EAAE,WAAW,UAAU,UAAU,UAAU,oBAAoB,SAAS,GACxE,kBACA,CACF;AAAA,EACA,MAAM,OAAO,YAAY,MAAM;AAAA,EAC/B,MAAM,QAAQ,eACZ,WACA,QAAQ,cAAc,OAAO,WAAW,OAAO,OAAO,GACtD,GACA,WAAW,OAAO,OACpB;AAAA,EACA,MAAM,eAAe,QAAQ;AAAA,EAC7B,IAAI,CAAC,cAAc;AAAA,IACjB,IAAI,QAAQ;AAAA,MAAqB,KAAK,mCAAmC;AAAA,IACzE,OAAO,UAAU,MAAM,IAAI,IAAI,uBAAuB,EAAE,GAAG,MAAM,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC;AAAA,EAC1F;AAAA,EACA,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS,WAAW,iBAAiB,SAAS;AAAA,IACrE,KACE,qDAAqD,WAAW,iBAAiB,qBACnF;AAAA,EACF;AAAA,EACA,MAAM,aAAa,UACjB,MAAM,IAAI,IAAI,qBAAqB,mBAAmB,YAAY,GAAG,CACvE;AAAA,EACA,MAAM,UAAU,oBAAoB,cAAc,YAAY,QAAQ,mBAAmB;AAAA,EACzF,UACE,MAAM,IAAI,KAAK,sBAAsB;AAAA,IACnC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,SAAS,aAAa;AAAA,MACrC,QAAQ;AAAA,MACR;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA,cAAc;AAAA,EAChB,CAAC,CACH;AAAA;AAIF,SAAS,mBAAmB,CAC1B,cACA,YACA,WACQ;AAAA,EACR,MAAM,WAAW,mBAAmB,UAAU;AAAA,EAC9C,IAAI,SAAS,WAAW,GAAG;AAAA,IACzB,KACE,GAAG,8CACH,qBACA,kDACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,WAAW;AAAA,IAC3B,IAAI,CAAC,SAAS,SAAS,SAAS,GAAG;AAAA,MACjC,KAAK,GAAG,uCAAuC,mBAAmB,SAAS,KAAK,IAAI,IAAI;AAAA,IAC1F;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS,SAAS,GAAG;AAAA,IACvB,KACE,GAAG,oCAAoC,SAAS,KAAK,IAAI,kCAC3D;AAAA,EACF;AAAA,EACA,OAAO,SAAS,MAAM;AAAA;AAGxB,eAAe,YAAY,CAAC,KAAgB,MAAwC;AAAA,EAClF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,UAAU;AAAA,EACnD,QAAQ,YAAY,iBAClB,MACA;AAAA,IACE,aAAa;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,cAAc;AAAA,EAChB,GACA,eACF;AAAA,EACA,IAAI,QAAQ,sBAAsB,QAAQ;AAAA,IACxC,KAAK,yDAAyD;AAAA,EAChE,IAAI,QAAQ,cAAc;AAAA,IACxB,IAAI,OAAO,KAAK,OAAO,EAAE,WAAW;AAAA,MAAG,KAAK,kDAAkD;AAAA,IAC9F,MAAM,OAAO,QAAQ;AAAA,IACrB,IAAI,SAAS;AAAA,MAAQ,OAAO,UAAU,OAAO,KAAK,cAAc,EAAE,KAAK,GAAG,CAAC;AAAA,IAC3E,MAAM,UAAU,eAAe;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAS,KAAK,0BAA0B,iDAAiD;AAAA,IAC9F,OAAO,UAAU,OAAO;AAAA,EAC1B;AAAA,EACA,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,eAAe,QAAQ,sBAAsB;AAAA,EACnD,IAAI,CAAC;AAAA,IAAQ,KAAK,yCAAyC;AAAA,EAC3D,MAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,EACnC,MAAM,SAAS,UAAS,KAAK;AAAA,EAC7B,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,IACtC,KAAK,WAAY,OAAO,OAAO,QAAQ,cAAc,IAAI,CAAC,IAAI,EAAE,aAAa,EAAG,IAChF,EAAE,OAAO,OAAO,aAAa;AAAA,EACjC,UAAU,MAAM,IAAI,KAAK,sBAAsB,IAAI,CAAC;AAAA;AAGtD,eAAe,aAAa,CAC1B,KACA,WACA,MACe;AAAA,EACf,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,uBAAuB,2BAA2B;AAAA,EAC3F,MAAM,SAAS,iBAAiB,MAAM,WAAW,WAAW;AAAA,EAC5D,MAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,EACnC,MAAM,SAAS,UAAS,KAAK;AAAA,EAC7B,UACE,MAAM,IAAI,KAAK,sBAAsB,aAAa;AAAA,IAChD,OAAO,OAAO,OAAO,QAAQ,OAAO,IAAI,OAAO,QAAQ;AAAA,EACzD,CAAC,CACH;AAAA;AAGF,eAAe,aAAa,CAAC,KAAgB,MAAwC;AAAA,EACnF,IAAI,aAAa,IAAI,GAAG;AAAA,IACtB,OAAO,UACL;AAAA,qCACF;AAAA,EACF;AAAA,EACA,QAAQ,YAAY,iBAClB,MACA,EAAE,UAAU,UAAU,aAAa,UAAU,GAC7C,gBACF;AAAA,EACA,IAAI,QAAQ,cAAc;AAAA,IACxB,IAAI,QAAQ;AAAA,MAAW,KAAK,2CAA2C;AAAA,IACvE,OAAO,UAAU,cAAc;AAAA,EACjC;AAAA,EACA,IAAI,CAAC,QAAQ;AAAA,IAAW,KAAK,0CAA0C;AAAA,EACvE,MAAM,OAAO,MAAM,SAAS,QAAQ,SAAS;AAAA,EAC7C,MAAM,SAAS,UAAS,IAAI;AAAA,EAC5B,IAAI,CAAC,OAAO,OAAO,QAAQ,OAAO,KAAK,CAAC,OAAO,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACvE,KAAK,qDAAqD;AAAA,EAC5D;AAAA,EACA,UAAU,MAAM,IAAI,KAAK,6BAA6B,IAAI,CAAC;AAAA;AAG7D,eAAe,YAAY,CAAC,KAAgB,MAAwC;AAAA,EAClF,IAAI,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,YAAY;AAAA,EACrD,QAAQ,aAAa,YAAY,iBAC/B,MACA;AAAA,IACE,UAAU;AAAA,IACV,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,EACvB,GACA,iBACA,CACF;AAAA,EACA,MAAM,eAAe,YAAY,MAAM;AAAA,EACvC,MAAM,YAAY,YAAY,MAAM;AAAA,EACpC,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,YAAY,UAAU,eAAe,QAAQ,kBAAkB,QAAQ;AAAA,IAC3E;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,MAAM,WAAW,eACf,eACA,QAAQ,kBAAkB,OAAO,WAAW,SAAS,OAAO,GAC5D,GACA,WAAW,SAAS,OACtB;AAAA,EACA,MAAM,YAAY,QAAQ;AAAA,EAC1B,MAAM,iBAAiB,QAAQ,wBAAwB;AAAA,EACvD,UACE,MAAM,IAAI,KAAK,4BAA4B;AAAA,IACzC,OAAO,EAAE,MAAM,QAAQ,MAAM,CAAC,EAAE,cAAc,UAAU,CAAC,EAAE;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,OACI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,OACvB,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,EACnC,CAAC,CACH;AAAA;;;AC9UF,eAAsB,QAAQ,CAAC,KAAgB,MAAwC;AAAA,EACrF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG;AAAA,IAAG,OAAO,UAAU,WAAW,QAAQ;AAAA,EAC7D,IAAI,QAAQ,QAAQ;AAAA,IAClB,IAAI,aAAa,IAAI;AAAA,MAAG,OAAO,UAAU,oCAAoC;AAAA,IAC7E,QAAQ,YAAY,iBAAiB,MAAM,EAAE,UAAU,UAAU,GAAG,eAAe;AAAA,IACnF,MAAM,OAAO,QAAQ,aAAa;AAAA,IAClC,MAAM,QAAQ,MAAM,IAAI,IAAI,mBAAmB;AAAA,IAC/C,IAAI;AAAA,MAAM,OAAO,UAAU,KAAK;AAAA,IAChC,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,MAAG,KAAK,gDAAgD;AAAA,IAChF,OAAO,UACL,MAAM,IAAI,CAAC,UAAU;AAAA,MACnB,MAAM,OAAO,UAAS,KAAK;AAAA,MAC3B,MAAM,aAAa,UAAU,KAAK,UAAU;AAAA,MAC5C,MAAM,iBAAiB,mBAAmB,IAAI;AAAA,MAC9C,OAAO;AAAA,QACL,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,mBAAmB,WAAW,KAAK,CAAC,aAAa,SAAS,YAAY,IAAI,GAAG;AAAA,WACzE,eAAe,WAAW,IAAI,CAAC,IAAI,EAAE,eAAe;AAAA,QACxD,OAAO,UAAU,KAAK,KAAK,EAAE,IAC3B,GAAG,IAAI,MAAM,aAAa,oBAAoB,mBAAmB;AAAA,UAC/D;AAAA,UACA;AAAA,aACI,gBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA,UACnD;AAAA,UACA;AAAA,QACF,EACF;AAAA,QACA,SAAS,UAAU,KAAK,OAAO,EAAE,IAAI,GAAG,IAAI,MAAM,mBAAmB;AAAA,UACnE;AAAA,UACA;AAAA,aACI,gBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA,QACrD,EAAE;AAAA,MACJ;AAAA,KACD,CACH;AAAA,EACF;AAAA,EACA,IAAI,QAAQ,OAAO;AAAA,IACjB,IAAI,aAAa,IAAI;AAAA,MAAG,OAAO,UAAU,wCAAwC;AAAA,IACjF,QAAQ,gBAAgB,iBAAiB,MAAM,CAAC,GAAG,gBAAgB,CAAC;AAAA,IACpE,OAAO,UAAU,MAAM,IAAI,IAAI,qBAAqB,mBAAmB,YAAY,MAAM,EAAE,GAAG,CAAC;AAAA,EACjG;AAAA,EACA,KAAK,6BAA6B,OAAO;AAAA;;;AC7C3C,eAAsB,OAAO,CAAC,KAAgB,MAAwC;AAAA,EACpF,IAAI,CAAC,KAAK,MAAM,OAAO,KAAK,EAAE,KAAM,KAAK,OAAO,UAAU,aAAa,KAAK,MAAM,CAAC,CAAC,GAAI;AAAA,IACtF,OAAO,UAAU,WAAW,OAAO;AAAA,EACrC;AAAA,EACA,IAAI,KAAK,OAAO;AAAA,IAAQ,KAAK,4BAA4B,KAAK,MAAM;AAAA,EACpE,iBAAiB,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc;AAAA,EAClD,UAAU,MAAM,IAAI,IAAI,cAAc,CAAC;AAAA;;;ACGzC,IAAM,sBAAsB,CAAC,UAAU,WAAW,aAAa,UAAU,WAAW;AACpF,IAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAsB,IAAI,CACxB,KACA,MACA,MACe;AAAA,EACf,OAAO,QAAQ,QAAQ;AAAA,EACvB,MAAM,QAAQ,GAAG;AAAA,EACjB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW,MAAM;AAAA,EACjF,IAAI,QAAQ,OAAO;AAAA,IACjB,QAAQ,gBAAgB,iBAAiB,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC;AAAA,IACpE,OAAO,UAAU,MAAM,IAAI,IAAI,QAAQ,SAAS,mBAAmB,YAAY,MAAM,EAAE,GAAG,CAAC;AAAA,EAC7F;AAAA,EACA,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,SAAS;AAAA,MACb,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA,MAAM,SAAS;AAAA,SACV;AAAA,MACH,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,WAAW,KAAK,QAAQ,cAAc,aAAa;AAAA,IACzD,MAAM,UAAU,uBACd,kBAAkB,MAAM,SAAS,WAAW,SAAS,UAAU,GAAG,YAAY,GAC9E;AAAA,MACE,cAAc,WAAW,KAAK;AAAA,MAC9B,cAAc,WAAW,KAAK;AAAA,MAC9B,cAAc;AAAA,MACd,QAAQ;AAAA,IACV,CACF;AAAA,IACA,IAAI,QAAQ,WAAW,WAAW;AAAA,MAChC,QAAQ,SAAS,UACf,YACA,QAAQ,QACR,SAAS,WAAW,sBAAsB,qBAC5C;AAAA,IACF;AAAA,IACA,YAAY,MAAM,SAAS;AAAA,MACzB,CAAC,gBAAgB,iBAAiB;AAAA,MAClC,CAAC,iBAAiB,kBAAkB;AAAA,IACtC,GAAY;AAAA,MACV,IAAI,QAAQ,UAAU;AAAA,QAAW,QAAQ,QAAQ,aAAa,MAAM,QAAQ,KAAK;AAAA,IACnF;AAAA,IACA,oBACE,mBACA,QAAQ,cACR,oBACA,QAAQ,aACV;AAAA,IACA,OAAO,UAAU,MAAM,IAAI,IAAI,QAAQ,SAAS,OAAO,CAAC;AAAA,EAC1D;AAAA,EACA,KAAK,WAAW,kBAAkB,OAAO;AAAA;;;ACnE3C,eAAsB,SAAS,CAAC,KAAgB,MAAwC;AAAA,EACtF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW,SAAS;AAAA,EACpF,IAAI,QAAQ,UAAU;AAAA,IACpB,QAAQ,gBAAgB,iBAAiB,MAAM,CAAC,GAAG,oBAAoB,CAAC;AAAA,IACxE,OAAO,UAAU,MAAM,IAAI,IAAI,cAAc,aAAa,QAAQ,CAAC,CAAC;AAAA,EACtE;AAAA,EACA,IAAI,QAAQ,WAAW;AAAA,IACrB,QAAQ,aAAa,YAAY,iBAC/B,MACA;AAAA,MACE,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA,IACb,GACA,qBACA,CACF;AAAA,IACA,MAAM,QAAQ,uBACZ;AAAA,MACE,MAAM,QAAQ;AAAA,MACd,IAAI,QAAQ;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,IACjB,GACA;AAAA,MACE,cAAc,WAAW,iBAAiB;AAAA,MAC1C,cAAc,WAAW,iBAAiB;AAAA,MAC1C,cAAc;AAAA,IAChB,CACF;AAAA,IACA,IAAI,MAAM,SAAS;AAAA,MAAW,MAAM,OAAO,aAAa,UAAU,MAAM,IAAI;AAAA,IAC5E,IAAI,MAAM,OAAO;AAAA,MAAW,MAAM,KAAK,aAAa,QAAQ,MAAM,EAAE;AAAA,IACpE,oBAAoB,UAAU,MAAM,MAAM,QAAQ,MAAM,EAAE;AAAA,IAC1D,OAAO,UAAU,MAAM,IAAI,IAAI,cAAc,aAAa,SAAS,GAAG,KAAK,CAAC;AAAA,EAC9E;AAAA,EACA,IAAI,QAAQ,SAAS;AAAA,IACnB,OAAO,UACL,MAAM,IAAI,KACR,0BACA,6BAA6B,MAAM,SAAS,iBAAiB,MAAM,iBAAiB,CAAC,CAAC,CACxF,CACF;AAAA,EACF;AAAA,EACA,KAAK,8BAA8B,OAAO;AAAA;AAG5C,SAAS,aAAa,CAAC,MAAyB,UAAwC;AAAA,EACtF,OAAO,gBAAgB,mBAAmB,KAAK,MAAM,EAAE,KAAK,mBAAmB,KAAK,MAAM,EAAE,eAAe,mBAAmB,KAAK,MAAM,EAAE,KAAK;AAAA;AAGlJ,SAAS,4BAA4B,CAAC,OAAyC;AAAA,EAC7E,IAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,IACvE,KAAK,8CAA8C;AAAA,EACrD;AAAA,EACA,MAAM,OAAO,KAAK,MAAM;AAAA,EACxB,MAAM,WAAW,KAAK;AAAA,EACtB,IAAI,aAAa,aAAa,OAAO,aAAa,UAAU;AAAA,IAC1D,KAAK,kCAAkC;AAAA,EACzC;AAAA,EACA,KAAK,iBAAiB,eACpB,kBACA,OAAO,YAAY,WAAW,iBAAiB,OAAO,GACtD,GACA,WAAW,iBAAiB,OAC9B;AAAA,EACA,MAAM,WAAW,KAAK;AAAA,EACtB,IAAI,aAAa,aAAa,OAAO,aAAa,UAAU;AAAA,IAC1D,KAAK,yBAAyB;AAAA,EAChC;AAAA,EACA,KAAK,QAAQ,UAAU,SAAS,YAAY,yBAAyB,CAAC,OAAO,MAAM,CAAC;AAAA,EACpF,WAAW,SAAS,CAAC,QAAQ,IAAI,GAAY;AAAA,IAC3C,MAAM,QAAQ,KAAK;AAAA,IACnB,IAAI,UAAU;AAAA,MAAW;AAAA,IACzB,IAAI,OAAO,UAAU;AAAA,MAAU,KAAK,GAAG,sCAAsC;AAAA,IAC7E,KAAK,SAAS,aAAa,OAAO,KAAK;AAAA,EACzC;AAAA,EACA,oBAAoB,QAAQ,KAAK,MAA4B,MAAM,KAAK,EAAwB;AAAA,EAChG,OAAO;AAAA;;;ACxFT,eAAsB,SAAS,CAAC,KAAgB,MAAwC;AAAA,EACtF,OAAO,QAAQ,QAAQ;AAAA,EACvB,IAAI,CAAC,OAAO,OAAO,GAAG,KAAK,aAAa,IAAI;AAAA,IAAG,OAAO,UAAU,WAAW,SAAS;AAAA,EACpF,IAAI,QAAQ,QAAQ;AAAA,IAClB,iBAAiB,MAAM,CAAC,GAAG,gBAAgB;AAAA,IAC3C,OAAO,UAAU,MAAM,IAAI,IAAI,gBAAgB,CAAC;AAAA,EAClD;AAAA,EACA,IAAI,QAAQ,OAAO;AAAA,IACjB;AAAA,MACE,cAAc;AAAA,QACZ,iBAAiB,MAAM,CAAC,GAAG,iBAAiB,CAAC;AAAA,IACjD,OAAO,UAAU,MAAM,IAAI,IAAI,kBAAkB,mBAAmB,cAAc,EAAE,GAAG,CAAC;AAAA,EAC1F;AAAA,EACA,IAAI,QAAQ,SAAS;AAAA,IACnB;AAAA,MACE,cAAc;AAAA,MACd;AAAA,QACE,iBAAiB,MAAM,EAAE,UAAU,SAAS,GAAG,mBAAmB,CAAC;AAAA,IACvE,MAAM,QAAiB,QAAQ,YAAY,MAAM,SAAS,QAAQ,SAAS,IAAI,CAAC;AAAA,IAChF,IAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,MACvE,KAAK,uCAAuC;AAAA,IAC9C;AAAA,IACA,OAAO,UACL,MAAM,IAAI,KAAK,kBAAkB,mBAAmB,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,CACzF;AAAA,EACF;AAAA,EACA,KAAK,8BAA8B,OAAO;AAAA;;;ACrBrC,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,SAAS,iBAAiB,CAAC,SAA6C;AAAA,EAC7E,OAAQ,kBAAwC,SAAS,OAAO;AAAA;AAGlE,eAAsB,QAAQ,CAC5B,KACA,SACA,MACe;AAAA,EACf,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,QAAQ,KAAK,IAAI;AAAA,SACrB;AAAA,MACH,OAAO,SAAS,KAAK,IAAI;AAAA,SACtB;AAAA,MACH,OAAO,QAAQ,KAAK,IAAI;AAAA,SACrB;AAAA,MACH,OAAO,UAAU,KAAK,IAAI;AAAA,SACvB;AAAA,MACH,OAAO,QAAQ,KAAK,IAAI;AAAA,SACrB;AAAA,MACH,OAAO,KAAK,KAAK,UAAU,IAAI;AAAA,SAC5B;AAAA,MACH,OAAO,MAAM,KAAK,IAAI;AAAA,SACnB;AAAA,MACH,OAAO,UAAU,KAAK,IAAI;AAAA,SACvB;AAAA,MACH,OAAO,KAAK,KAAK,YAAY,IAAI;AAAA;AAAA,MAEjC,KAAK,oBAAoB,8BAA8B;AAAA;AAAA;;AC/B7D,eAAsB,cAAc,CAAC,OAA2C;AAAA,EAC9E,OAAO,YAAY,QAAQ,MAAM;AAAA,EACjC,MAAM,SAAS,wBAAwB,MAAM,IAAI,GAAG,WAAW,IAAI,IAAI;AAAA;AAGlE,SAAS,uBAAuB,CAAC,MAAkC;AAAA,EACxE,OAAO,IAAI,UAAU;AAAA,IACnB,SAAS,KAAK;AAAA,OACV,KAAK,SAAS,WAAW,KAAK,QAAQ,EAAE,eAAe,UAAU,KAAK,QAAQ,IAAI,CAAC;AAAA,IACvF,uBACE,KAAK,SAAS,YACV,kCACA;AAAA,IACN,oBACE,KAAK,SAAS,YACV,+CACA;AAAA,IACN,iBACE,KAAK,SAAS,YACV,iEACA;AAAA,EACR,CAAC;AAAA;",
24
- "debugId": "F1EB880C95B058F464756E2164756E21",
23
+ "mappings": "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",
24
+ "debugId": "D8A3DF8338E3251F64756E2164756E21",
25
25
  "names": []
26
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/cli-core",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Shared instance command runtime for Sixb CLIs",
5
5
  "keywords": [
6
6
  "sixb",
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
- async post(path: string, body: unknown): Promise<unknown> {
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
  }
@@ -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
- export async function actions(api: ApiClient, args: readonly string[]): Promise<void> {
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
- const requested = await api.post(`/api/actions/${encodeURIComponent(actionId)}`, {
50
- params,
51
- ...(subjectType && subjectId
52
- ? { subject: { kind: "object", objectTypeId: subjectType, primaryId: subjectId } }
53
- : {}),
54
- ...(runId ? { runId } : {}),
55
- })
56
- if (!wait) return writeJson(requested)
57
-
58
- const requestedRunId = asRecord(requested).runId
59
- if (typeof requestedRunId !== "string" || requestedRunId.length === 0) {
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: "invalid_api_response",
63
- message: "The Action request response did not contain a run id.",
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
- }
@@ -204,11 +204,12 @@ History options:
204
204
  actions: `Usage:
205
205
  sixb actions list [--type <object-type>]
206
206
  sixb actions get <action-id>
207
- sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]
207
+ sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>]
208
208
 
209
209
  \`actions get\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file
210
- contains that parameter object; use - to read standard input. --wait returns the terminal Action
211
- 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\`.`,
212
213
  "action-runs": `Usage:
213
214
  sixb action-runs list [options]
214
215
  sixb action-runs get <run-id>
@@ -217,7 +218,7 @@ List options:
217
218
  --action <action-id>
218
219
  --type <object-type>
219
220
  --id <primary-id>
220
- --status queued|running|succeeded|failed|cancelled
221
+ --status succeeded|failed
221
222
  --started-after|--started-before <RFC3339>
222
223
  --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}
223
224
  --offset <n> Non-negative; defaults to 0
@@ -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 = ["queued", "running", "succeeded", "failed", "cancelled"] as const
15
+ const ACTION_RUN_STATUSES = ["succeeded", "failed"] as const
16
16
  const WORKFLOW_RUN_STATUSES = [
17
17
  "queued",
18
18
  "running",