@sixb/cli-core 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +6 -2
- package/dist/api-client.d.ts.map +1 -1
- package/dist/arguments.d.ts +4 -2
- package/dist/arguments.d.ts.map +1 -1
- package/dist/commands/actions.d.ts +3 -1
- package/dist/commands/actions.d.ts.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/metadata.d.ts +6 -3
- package/dist/commands/metadata.d.ts.map +1 -1
- package/dist/commands/models.d.ts +79 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/objects.d.ts.map +1 -1
- package/dist/commands/shared.d.ts +2 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/users.d.ts +3 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/workflows.d.ts.map +1 -1
- package/dist/index.js +561 -63
- package/dist/index.js.map +16 -14
- package/dist/output.d.ts +12 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/policies.d.ts +5 -0
- package/dist/policies.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api-client.ts +22 -4
- package/src/arguments.ts +18 -6
- package/src/commands/actions.ts +43 -41
- package/src/commands/index.ts +8 -0
- package/src/commands/metadata.ts +80 -8
- package/src/commands/models.ts +508 -0
- package/src/commands/objects.ts +47 -2
- package/src/commands/runs.ts +1 -1
- package/src/commands/shared.ts +11 -7
- package/src/commands/users.ts +67 -0
- package/src/commands/workflows.ts +10 -4
- package/src/output.ts +21 -0
- package/src/policies.ts +2 -0
package/dist/index.js.map
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
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/
|
|
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/commands/models.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/users.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
|
|
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]
|
|
8
|
-
"
|
|
9
|
-
"import {\n CLI_LIMITS,\n DEFAULT_LIST_ORDER,\n DEFAULT_OBJECT_ORDER_BY,\n DEFAULT_TELEMETRY_ORDER,\n} from \"../policies\"\n\nconst SANDBOX_MAIN_HELP = `Sixb agent CLI\n\nUsage:\n sixb <command> [options]\n\nThe CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\nAPI commands emit JSON. Help, version, and examples emit text. Downloads write to --output and\nemit a JSON receipt.\n\nDiscovery:\n sixb doctor Check the sandbox and API gateway\n sixb context Print the current run context\n sixb project show Show project metadata\n sixb ontology list Compact visible type and relationship catalog\n sixb ontology get <type> Inspect one object type, properties, links, and actions\n\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\n\\`sixb ontology get\\` for a type that has no file there.\n\nObjects:\n sixb objects inspect <type> <id> Inspect an object and its related graph in one command\n sixb objects list [options] Browse materialized objects\n sixb objects get <type> <id>... Exact lookup through opaque object references\n sixb objects search <text> Search visible objects by id prefix and full text\n sixb objects search <text> --type <type>\n Semantic search through the type's vector profile\n sixb objects query --file <file|-> Execute query IR from JSON\n sixb objects count --file <file|-> Count a query without returning rows\n sixb objects exists --file <file|-> Test whether a query has a match\n sixb objects facets --file <file|-> Run a {query, facets} request\n sixb objects links <type> <id> Read exact persisted links\n\nTelemetry:\n sixb telemetry latest <type> <id> <property>\n sixb telemetry history <type> <id> <property> [options]\n sixb telemetry query --file <file|->\n\nActions and workflows:\n sixb actions list|get|request ...\n sixb action-runs list|get ...\n sixb workflows list|get|start ...\n sixb workflow-runs list|get ...\n\nFiles:\n sixb files upload|download ...\n\nRun \\`sixb <group> --help\\` or \\`sixb <group> <command> --help\\` for exact arguments.\nFor query IR, run \\`sixb objects query --help\\` and \\`sixb objects query --example list\\`.`\n\nconst LOCAL_MAIN_HELP = SANDBOX_MAIN_HELP.replace(\"Sixb agent CLI\", \"Sixb instance CLI\")\n .replace(\n \"The CLI uses the run-scoped SIXB_API_BASE_URL. Do not configure authentication or another origin.\",\n \"The CLI uses the selected local profile and its API credentials.\"\n )\n .replace(\n \" sixb doctor Check the sandbox and API gateway\\n sixb context Print the current run context\\n\",\n \"\"\n )\n .replace(\n \"\\nWhen you do not know a type's properties or links, read its file under $SIXB_ONTOLOGY_DIR. Use\\n`sixb ontology get` for a type that has no file there.\\n\",\n \"\"\n )\n\nexport function renderInstanceHelp(mode: \"local\" | \"sandbox\"): string {\n return mode === \"sandbox\" ? SANDBOX_MAIN_HELP : LOCAL_MAIN_HELP\n}\n\nconst SEARCH_DETAILS = `Without --type, search matches primary-id prefixes and full-text fields across visible types.\nWith --type, the server embeds the text with the profile's model and ranks results by score,\na cosine similarity where higher is closer. \\`sixb ontology list\\` shows each type's\nvectorProfiles. To combine semantic search with filters, run\n\\`sixb objects query --example vector\\`.`\n\nexport const SEARCH_HELP = `Usage:\n sixb objects search <text> [--limit <1-${CLI_LIMITS.search.maximum}>]\n sixb objects search <text> --type <object-type> [--vector-profile <name>] [--limit <1-${CLI_LIMITS.search.maximum}>]\n\n--limit defaults to ${CLI_LIMITS.search.default}. --vector-profile is required when the type declares several\nprofiles.\n\n${SEARCH_DETAILS}`\n\nexport const OBJECTS_HELP = `Usage:\n sixb objects inspect <object-type> <primary-id> [options]\n sixb objects list [options]\n sixb objects get <object-type> <primary-id>...\n sixb objects search <text> [--type <object-type> [--vector-profile <name>]] [--limit <n>]\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects count --file <path|->\n sixb objects exists --file <path|->\n sixb objects facets --file <path|->\n sixb objects facets --example\n sixb objects links <object-type> <primary-id> [options]\n\nList options:\n --type <id> Exact ontology object type id\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order-by createdAt|updatedAt|primaryId Defaults to ${DEFAULT_OBJECT_ORDER_BY}\n --order asc|desc Defaults to ${DEFAULT_LIST_ORDER}\n --id-prefix <value> Primary-id prefix\n --id-suffix <value> Primary-id suffix\n --created-after|--created-before <RFC3339>\n --updated-after|--updated-before <RFC3339>\n\nSearch options:\n --limit <1-${CLI_LIMITS.search.maximum}> Defaults to ${CLI_LIMITS.search.default}\n --type <id> Semantic search through this type's vector profile\n --vector-profile <name> Required when the type declares several profiles\n\nLinks options:\n --link <link-id>\n --direction outgoing|incoming|both Defaults to both\n --page-size <1-${CLI_LIMITS.linkPage.maximum}> Defaults to ${CLI_LIMITS.linkPage.default}\n --page-token <token> Continue an edge page\n --include-objects Include selected and current-page endpoint objects\n\nInspect options:\n --depth <0-${CLI_LIMITS.inspect.depth.maximum}> Defaults to ${CLI_LIMITS.inspect.depth.default}; use 0 for only the object\n --max-objects <1-${CLI_LIMITS.inspect.objects.maximum}> Defaults to ${CLI_LIMITS.inspect.objects.default}\n --max-links <1-${CLI_LIMITS.inspect.links.maximum}> Defaults to ${CLI_LIMITS.inspect.links.default}\n --full Include timestamps and encountered type definitions\n\nUse \\`objects get\\` first when context provides an exact object reference. Use \\`objects inspect\\`\nonly when related objects are needed; it follows both relationship directions to depth 2 by\ndefault and returns a bounded graph.\nInspect omits materialization timestamps and ontology definitions by default. Use \\`--full\\` when\nstorage timestamps, declared links, or available actions are needed.\n\n${SEARCH_DETAILS}\n\n\\`objects get\\` uses a refs query without identity URL paths. Opaque ids containing :, /, #, ?, or\n% are safe. Identifiers are case-sensitive.`\n\nexport const QUERY_HELP = `Usage:\n sixb objects query --file <path|-> [--include-total|--no-total]\n sixb objects query --example <name>\n sixb objects query --example list\n\nInput is a query node. A full {\"query\": ...} request is also accepted.\n\nQuery nodes compose through input:\n start {\"kind\":\"start\",\"objectTypeId\":\"Type\",\"includeSubtypes\":false}\n refs {\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"Type\",\"primaryId\":\"opaque:id\"}]}\n filter {\"kind\":\"filter\",\"input\":<query>,\"predicate\":<predicate>}\n text {\"kind\":\"text\",\"input\":<query>,\"query\":\"words\",\"fields\":[\"name\"]}\n traverse {\"kind\":\"traverse\",\"input\":<query>,\"linkId\":\"link\",\"direction\":\"outgoing\"}\n set {\"kind\":\"set\",\"op\":\"union\",\"inputs\":[<query>,<query>]} op: union, intersect, subtract\n sort {\"kind\":\"sort\",\"input\":<query>,\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]}\n limit {\"kind\":\"limit\",\"input\":<query>,\"limit\":${CLI_LIMITS.list.default}}\n page {\"kind\":\"page\",\"input\":<query>,\"pageSize\":${CLI_LIMITS.list.default},\"pageToken\":\"from nextPageToken\"}\n project {\"kind\":\"project\",\"input\":<query>,\"properties\":[\"name\",\"status\"]}\n expand {\"kind\":\"expand\",\"input\":<query>,\"expansions\":[{\"linkId\":\"link\",\"direction\":\"outgoing\",\"limit\":5}]}\n vector {\"kind\":\"vector\",\"input\":<start|filter>,\"vector\":\"text\",\"profile\":\"name\",\"k\":10}\n rerank {\"kind\":\"rerank\",\"input\":<vector>,\"model\":{\"provider\":\"provider\",\"modelId\":\"model\"}}\n\nPredicates use op, not kind:\n {\"op\":\"and\",\"items\":[<predicate>,<predicate>]} or: same shape\n {\"op\":\"not\",\"item\":<predicate>}\n {\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"open\"} neq, lt, lte, gt, gte: same shape\n {\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"open\",\"blocked\"]}\n {\"op\":\"exists\",\"propertyId\":\"dueDate\",\"value\":true}\n {\"op\":\"contains\",\"propertyId\":\"tags\",\"value\":\"urgent\"}\n\nEvery field shown is required except includeSubtypes, fields, pageToken, properties, a sort\ndirection, and an expansion's limit. Sort by relevance after text or vector with\n{\"kind\":\"relevance\"}. Wrap the outermost node in project to return only the properties you need.\n\nTraversal and expansion directions are outgoing or incoming. For incoming relationships, the link\nis declared on the child/source type; add sourceObjectTypeId when needed to disambiguate it.\n\nNever guess property or link ids: run \\`sixb ontology get <type>\\` (in the agent sandbox, read\nthe type's file under $SIXB_ONTOLOGY_DIR). Use refs for exact\nidentities. Put limits and pages inside the query tree.\n\nVector profile names are the keys of the type's search.vectors. Vector input is a start node,\noptionally under filters; k bounds the ranked matches and results carry a score.`\n\nexport const GROUP_HELP = {\n doctor: \"Usage: sixb doctor\",\n context: \"Usage: sixb context\",\n project: \"Usage: sixb project show\",\n ontology: `Usage:\n sixb ontology list [--full]\n sixb ontology get <object-type>`,\n telemetry: `Usage:\n sixb telemetry latest <object-type> <primary-id> <property-id>\n sixb telemetry history <object-type> <primary-id> <property-id> [options]\n sixb telemetry query --file <path|->\n\nHistory options:\n --from <RFC3339>\n --to <RFC3339>\n --limit <1-${CLI_LIMITS.telemetryHistory.maximum}> Defaults to ${CLI_LIMITS.telemetryHistory.default}\n --order <asc|desc> Timestamp order; defaults to ${DEFAULT_TELEMETRY_ORDER}`,\n actions: `Usage:\n sixb actions list [--type <object-type>]\n sixb actions get <action-id>\n sixb actions request <action-id> [--subject-type <type> --subject-id <id>] [--file <path|->] [--run-id <id>] [--wait]\n\n\\`actions get\\` includes inputSchema, the exact JSON shape accepted by the Action. The JSON file\ncontains that parameter object; use - to read standard input. --wait returns the terminal Action\nrun and waits at most 25 seconds.`,\n \"action-runs\": `Usage:\n sixb action-runs list [options]\n sixb action-runs get <run-id>\n\nList options:\n --action <action-id>\n --type <object-type>\n --id <primary-id>\n --status queued|running|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n files: `Usage:\n sixb files upload <local-path> [--logical-path <path>]\n sixb files download object <type> <id> --path <json-pointer> --output <local-path>\n sixb files download action-run|workflow-run <run-id> --path <json-pointer> --output <local-path>`,\n workflows: `Usage:\n sixb workflows list\n sixb workflows get <workflow-id>\n sixb workflows start <workflow-id> [--file <path|->]\n\nThe JSON file contains the workflow input object. Use - to read standard input.`,\n \"workflow-runs\": `Usage:\n sixb workflow-runs list [options]\n sixb workflow-runs get <run-id>\n\nList options:\n --workflow <workflow-id>\n --status queued|running|waiting|succeeded|failed|cancelled\n --started-after|--started-before <RFC3339>\n --limit <1-${CLI_LIMITS.list.maximum}> Defaults to ${CLI_LIMITS.list.default}\n --offset <n> Non-negative; defaults to 0\n --order <asc|desc> Started-time order; defaults to ${DEFAULT_LIST_ORDER}`,\n} as const\n\nexport const QUERY_EXAMPLES: Readonly<Record<string, string>> = {\n exact:\n '{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]}',\n filter: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"limit\":${CLI_LIMITS.list.default}}`,\n and: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"and\",\"items\":[{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"},{\"op\":\"gte\",\"propertyId\":\"createdAt\",\"value\":\"2026-01-01T00:00:00Z\"}]}},\"limit\":${CLI_LIMITS.list.default}}`,\n not: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"not\",\"item\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"churned\"}}},\"limit\":${CLI_LIMITS.list.default}}`,\n in: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"in\",\"propertyId\":\"status\",\"values\":[\"active\",\"trial\"]}},\"limit\":${CLI_LIMITS.list.default}}`,\n exists: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"predicate\":{\"op\":\"exists\",\"propertyId\":\"accountManager\",\"value\":false}},\"limit\":${CLI_LIMITS.list.default}}`,\n project: `{\"kind\":\"project\",\"input\":{\"kind\":\"limit\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"limit\":${CLI_LIMITS.list.default}},\"properties\":[\"name\",\"status\"]}`,\n incoming:\n '{\"kind\":\"traverse\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\"}',\n expand: `{\"kind\":\"expand\",\"input\":{\"kind\":\"refs\",\"refs\":[{\"objectTypeId\":\"RepositoryIssue\",\"primaryId\":\"github:issue:owner/repo#297\"}]},\"expansions\":[{\"linkId\":\"issue\",\"direction\":\"incoming\",\"sourceObjectTypeId\":\"RepositoryComment\",\"limit\":${CLI_LIMITS.list.default}}]}`,\n sort: `{\"kind\":\"limit\",\"input\":{\"kind\":\"sort\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"fields\":[{\"kind\":\"property\",\"propertyId\":\"name\",\"direction\":\"asc\"}]},\"limit\":${CLI_LIMITS.list.default}}`,\n page: `{\"kind\":\"page\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Customer\"},\"pageSize\":${CLI_LIMITS.list.default}}`,\n vector: `{\"kind\":\"vector\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Product\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"status\",\"value\":\"active\"}},\"vector\":\"waterproof trail shoes\",\"profile\":\"content\",\"k\":${CLI_LIMITS.search.default}}`,\n}\n\nexport const FACETS_EXAMPLE =\n '{\"query\":{\"kind\":\"start\",\"objectTypeId\":\"WorkOrder\"},\"facets\":[{\"propertyId\":\"status\",\"limit\":10}]}'\n",
|
|
10
|
-
"import { readFile } from \"node:fs/promises\"\nimport { enumValue, integerInRange, nonNegativeInteger, parseCommandArgs } from \"../arguments\"\nimport { fail } from \"../output\"\n\nexport type QueryOptions = Record<string, string | undefined>\n\n/** Parse flag/value pairs into API query parameters. */\n\nexport function parseQueryOptions(\n args: readonly string[],\n names: Readonly<Record<string, string>>,\n command: string\n): QueryOptions {\n const kinds = Object.fromEntries(Object.keys(names).map((flag) => [flag, \"string\" as const]))\n const { options } = parseCommandArgs(args, kinds, command)\n const query: QueryOptions = {}\n for (const [flag, value] of Object.entries(options)) {\n const name = names[flag]\n if (name) query[name] = value\n }\n return query\n}\n\nexport function normalizeWindowOptions(\n options: QueryOptions,\n policy: {\n readonly defaultLimit: number\n readonly maximumLimit: number\n readonly defaultOrder: \"asc\" | \"desc\"\n readonly offset?: boolean\n }\n): QueryOptions {\n const normalized: QueryOptions = {\n ...options,\n limit: String(\n integerInRange(\n \"--limit\",\n options.limit ?? String(policy.defaultLimit),\n 1,\n policy.maximumLimit\n )\n ),\n order: enumValue(\"--order\", options.order ?? policy.defaultOrder, [\"asc\", \"desc\"]),\n }\n if (policy.offset && options.offset !== undefined) {\n normalized.offset = String(nonNegativeInteger(\"--offset\", options.offset))\n }\n return normalized\n}\n\nexport function singleFileOption(args: readonly string[], command: string): string {\n const { options } = parseCommandArgs(args, { \"--file\": \"string\" }, command)\n if (!options[\"--file\"]) fail(`${command} requires --file <path|->.`)\n return options[\"--file\"]\n}\n\nexport async function readJson(source: string): Promise<unknown> {\n let text: string\n try {\n text = source === \"-\" ? await readStdin() : await readFile(source, \"utf8\")\n } catch (error) {\n if (isFileError(error, \"ENOENT\")) fail(`JSON file '${source}' does not exist.`)\n throw error\n }\n try {\n return JSON.parse(text)\n } catch {\n fail(\n source === \"-\"\n ? \"Standard input is not valid JSON.\"\n : `JSON file '${source}' is not valid JSON.`,\n \"invalid_json\"\n )\n }\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nexport function asRecords(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.map(asRecord) : []\n}\n\n/** Names of an object type definition's `search.vectors` profiles, in declaration order. */\nexport function vectorProfileNames(objectType: Record<string, unknown>): string[] {\n return Object.keys(asRecord(asRecord(objectType.search).vectors))\n}\n\nexport function isFileError(error: unknown, code: string): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error && error.code === code\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Uint8Array[] = []\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? new TextEncoder().encode(chunk) : chunk)\n }\n return new TextDecoder().decode(Buffer.concat(chunks))\n}\n",
|
|
11
|
-
"import
|
|
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 /** `mediaType` labels the part; without it, the server reads the type from the file name. */\n async upload(\n path: string,\n source: string,\n logicalPath?: string,\n mediaType?: string\n ): Promise<unknown> {\n const form = new FormData()\n const bytes = new Uint8Array(await readFile(source))\n form.append(\n \"file\",\n new Blob([bytes], mediaType ? { type: mediaType } : undefined),\n basename(source)\n )\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
|
+
"/** 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/** The request waits for its user's approval: it did not run. */\nexport const EXIT_AWAITING_APPROVAL = 4\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\n/** Ends a command that already wrote its output, with an exit code that is not a success. */\nexport class CliExit extends Error {\n constructor(readonly exitCode: number) {\n super(`The Sixb CLI exited with code ${exitCode}.`)\n this.name = \"CliExit\"\n }\n}\n\n/**\n * Print what a request that changes state answered. A request held for the user's approval prints\n * as the API answered it, and exits with {@link EXIT_AWAITING_APPROVAL}: `a && b` does not run `b`.\n */\nexport function writeRequestResult(value: unknown): void {\n writeJson(value)\n const status = typeof value === \"object\" && value !== null ? Reflect.get(value, \"status\") : null\n if (status === \"awaiting_approval\") throw new CliExit(EXIT_AWAITING_APPROVAL)\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 if (error instanceof CliExit) return error.exitCode\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\n/** `strings` may repeat, and collects every value in order. */\ntype OptionKinds = Readonly<Record<string, \"string\" | \"strings\" | \"boolean\">>\n\ntype OptionValue<TKind> = TKind extends \"boolean\"\n ? boolean\n : TKind extends \"strings\"\n ? string[]\n : string\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]?: OptionValue<T[K]> }\n} {\n const positionals: string[] = []\n const options: Record<string, 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) && kinds[flag] !== \"strings\") {\n fail(`${flag} may only be provided once.`)\n }\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 const previous = options[flag]\n options[flag] =\n kinds[flag] === \"strings\" ? [...(Array.isArray(previous) ? previous : []), value] : 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]?: OptionValue<T[K]> },\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, writeRequestResult, 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 writeRequestResult(\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",
|
|
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 /** The server lists at most 200 members per page. */\n users: { default: 20, maximum: 200 },\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",
|
|
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 get-by <type> <property> <value>\n The object holding a value of a unique property\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\nMembers:\n sixb users search <text> Find members by name or email\n sixb users list|get ...\n\nA user parameter or property is {\"type\":\"user\",\"id\":\"<user-id>\"}. Find the id with\n\\`sixb users search <name>\\`.\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\n // The agent reaches models through its run's gateway once the model routes allow it.\n .replace(\n \"Files:\\n sixb files upload|download ...\\n\",\n \"Files:\\n sixb files upload|download ...\\n\\nModels:\\n sixb models list [--kind <kind>] Configured models of every kind, with prices\\n sixb models get <model> One model's options and rate card\\n sixb models text|image|speech|transcribe ... Call a model; see sixb models --help\\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 GET_BY_HELP = `Usage:\n sixb objects get-by <object-type> <property> <value> [--json]\n\nPrints the object of exactly <object-type> holding <value> for a property marked unique in its\nontology doc, or null when no visible object holds it. Values match exactly, case included.\nThe value is a string; with --json it is parsed as JSON, for an integer (42) or a user\nreference ({\"type\":\"user\",\"id\":\"usr_1\"}).`\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 get-by <object-type> <property> <value> [--json]\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}],\"users\":[\"assignee\"]}\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 {\"op\":\"eq\",\"propertyId\":\"assignee\",\"value\":{\"type\":\"currentUser\"}} the caller, on a user reference: neq, in, contains too\n\nEvery field shown is required except includeSubtypes, fields, pageToken, properties, a sort\ndirection, an expansion's limit, and users. 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\nAn expand's users, or an expansion's, lists user-reference properties: each row then carries the\nmembers' profiles under users (id, email, displayName, avatarUrl, status). Without access to the\nmember directory, users is empty.\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\\`. A request\nthat waits for the user's approval prints \\`\"status\": \"awaiting_approval\"\\` and exits with code 4.`,\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|->] [--run-id <id>]\n\nThe JSON file contains the workflow input object. Use - to read standard input. A start that waits\nfor the user's approval prints \\`\"status\": \"awaiting_approval\"\\` and exits with code 4.`,\n users: `Usage:\n sixb users list [options]\n sixb users search <text> [options]\n sixb users get <user-id>\n\nOptions:\n --status active|suspended|all Defaults to active\n --limit <1-${CLI_LIMITS.users.maximum}> Defaults to ${CLI_LIMITS.users.default}\n --offset <n> Non-negative; defaults to 0\n\n\\`users search\\` matches part of a display name or email, ignoring case. Each member is\n{\"id\",\"email\",\"displayName\",\"avatarUrl\",\"status\"}; a user parameter takes\n{\"type\":\"user\",\"id\":\"<id>\"}. Reading members requires can.view(project.users).`,\n models: `Usage:\n sixb models list [--kind language|image|speech|transcription]\n sixb models get <model> [--kind <kind>]\n sixb models text \"<prompt>\"|--file <path|-> [--model <tier|model>] [--instructions <text>]\n [--max-output-tokens <n>] [--reasoning <level>]\n sixb models image \"<prompt>\" --output <path> [--model <model>] [--n <n>]\n [--size <size>] [--aspect-ratio <ratio>] [--quality <q>] [--style <s>]\n [--seed <n>] [--image <file>]...\n sixb models speech \"<text>\" --output <path> [--model <model>] [--voice <voice>]\n [--format mp3|wav|ogg|aac|flac] [--instructions <text>]\n [--speed <n>] [--language <code>]\n sixb models transcribe <file> [--model <model>]\n sixb models calls files <call-id> [--output <path>]\n\n<model> is a model id, or provider:model-id when two providers share one; without --model, the\nkind's default answers. \\`list\\` shows each model's kind, default, description and price; \\`get\\`\nadds the sizes, voices and other options a request can use. Prices are in USD.\n\n\\`text\\` also takes a tier (light, standard or heavy) for --model, and reads a long prompt from\n--file: a path, or - for standard input.\n\n--output is a file, numbered when a call returns several, or a directory ending in /. The\nextension follows the file's type, and the result lists the paths written. --image uploads a\nreference image; repeat it for several. \\`calls files\\` lists a past call's files, or downloads\nthem again.`,\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 mine: `{\"kind\":\"limit\",\"input\":{\"kind\":\"filter\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Task\"},\"predicate\":{\"op\":\"eq\",\"propertyId\":\"assignee\",\"value\":{\"type\":\"currentUser\"}}},\"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 users: `{\"kind\":\"expand\",\"input\":{\"kind\":\"limit\",\"input\":{\"kind\":\"start\",\"objectTypeId\":\"Task\"},\"limit\":${CLI_LIMITS.list.default}},\"expansions\":[],\"users\":[\"assignee\"]}`,\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",
|
|
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 const text = await readText(source, \"JSON file\")\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\n/** A file's text, or standard input's when the source is `-`. */\nexport async function readText(source: string, noun: string): Promise<string> {\n try {\n return source === \"-\" ? await readStdin() : await readFile(source, \"utf8\")\n } catch (error) {\n if (isFileError(error, \"ENOENT\")) fail(`${noun} '${source}' does not exist.`)\n throw error\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",
|
|
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
|
+
"import { access, mkdir, stat } from \"node:fs/promises\"\nimport { dirname, extname, join, parse } from \"node:path\"\nimport type { ApiClient } from \"../api-client\"\nimport { enumValue, integerInRange, isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { GROUP_HELP } from \"./metadata\"\nimport { readText } from \"./shared\"\n\nexport const MODEL_KINDS = [\"language\", \"image\", \"speech\", \"transcription\"] as const\nexport type ModelKind = (typeof MODEL_KINDS)[number]\n\ntype TokenPrice =\n | string\n | { readonly default: string; readonly tiers: readonly { readonly price: string }[] }\ntype VariantPrice =\n | string\n | {\n readonly default?: string\n readonly variants: readonly (Readonly<Record<string, string>> & { readonly price: string })[]\n }\n\n/** The prices a binding bills by, as GET /api/models returns them. */\nexport interface RateCard {\n readonly input?: TokenPrice\n readonly output?: TokenPrice\n readonly cacheReadInput?: TokenPrice\n readonly audioOutput?: TokenPrice\n readonly images?: VariantPrice\n readonly characters?: VariantPrice\n readonly audioInputSeconds?: VariantPrice\n}\n\ninterface CatalogEntry {\n readonly provider: string\n readonly modelId: string\n readonly isDefault: boolean\n readonly tier?: string\n readonly name?: string\n readonly description?: string\n readonly rateCard?: RateCard\n readonly [option: string]: unknown\n}\n\ninterface Catalog {\n readonly language: readonly CatalogEntry[]\n readonly image: readonly CatalogEntry[]\n readonly audio: {\n readonly speech: readonly CatalogEntry[]\n readonly transcription: readonly CatalogEntry[]\n }\n}\n\nexport async function models(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.models)\n if (sub === \"list\") {\n const { options } = parseCommandArgs(rest, { \"--kind\": \"string\" }, \"models list\", 0)\n const kind = options[\"--kind\"] === undefined ? undefined : modelKind(options[\"--kind\"])\n const entries = catalogEntries((await api.get(\"/api/models\")) as Catalog)\n return writeJson(\n entries\n .filter((entry) => kind === undefined || entry.kind === kind)\n .map(({ kind, entry }) => ({\n kind,\n model: entry.modelId,\n provider: entry.provider,\n ...(entry.tier ? { tier: entry.tier } : {}),\n ...(entry.isDefault ? { default: true } : {}),\n ...(entry.description ? { description: entry.description } : {}),\n price: describePrice(entry.rateCard),\n }))\n )\n }\n if (sub === \"get\") {\n const { positionals, options } = parseCommandArgs(rest, { \"--kind\": \"string\" }, \"models get\", 1)\n const kind = options[\"--kind\"] === undefined ? undefined : modelKind(options[\"--kind\"])\n const entries = catalogEntries((await api.get(\"/api/models\")) as Catalog)\n const { kind: found, entry } = findModel(entries, positionals[0] ?? \"\", kind)\n const { provider, modelId, isDefault, rateCard, ...details } = entry\n return writeJson({\n kind: found,\n model: modelId,\n provider,\n default: isDefault,\n ...details,\n price: describePrice(rateCard),\n ...(rateCard ? { rateCard } : {}),\n })\n }\n if (sub === \"text\") return generateText(api, rest)\n if (sub === \"image\") return generateImages(api, rest)\n if (sub === \"speech\") return generateSpeech(api, rest)\n if (sub === \"transcribe\") return transcribe(api, rest)\n if (sub === \"calls\") return calls(api, rest)\n fail(`Unknown models command '${sub}'.`)\n}\n\ninterface FileRef {\n readonly blobId: string\n readonly mediaType?: string\n readonly sizeBytes: number\n}\n\ninterface CallResult {\n readonly callId: string\n readonly model: { readonly provider: string; readonly modelId: string }\n readonly cost: { readonly status: string; readonly money?: { readonly amountNanos: string } }\n readonly text?: string\n readonly finishReason?: string\n readonly files?: readonly FileRef[]\n readonly warnings?: readonly string[]\n}\n\nconst SPEECH_FORMATS = {\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n} as const\nconst SPEECH_FORMAT_NAMES = Object.keys(SPEECH_FORMATS) as (keyof typeof SPEECH_FORMATS)[]\n\n// Files the commands upload, and the extension a downloaded file takes from its media type.\nconst MEDIA_TYPES: Readonly<Record<string, string>> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".webp\": \"image/webp\",\n \".gif\": \"image/gif\",\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".ogg\": \"audio/ogg\",\n \".aac\": \"audio/aac\",\n \".flac\": \"audio/flac\",\n \".opus\": \"audio/opus\",\n \".m4a\": \"audio/mp4\",\n \".webm\": \"audio/webm\",\n}\nconst EXTENSIONS: Readonly<Record<string, string>> = Object.fromEntries(\n Object.entries(MEDIA_TYPES)\n .filter(([extension]) => extension !== \".jpeg\")\n .map(([extension, mediaType]) => [mediaType, extension])\n)\n\nasync function generateText(api: ApiClient, args: readonly string[]): Promise<void> {\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--model\": \"string\",\n \"--instructions\": \"string\",\n \"--max-output-tokens\": \"string\",\n \"--reasoning\": \"string\",\n \"--file\": \"string\",\n },\n \"models text\",\n [0, 1]\n )\n const prompt = await readPrompt(positionals[0], options[\"--file\"])\n const maxOutputTokens = options[\"--max-output-tokens\"]\n const result = (await api.post(\"/api/models/language/generations\", {\n ...(await languageModelRef(api, options[\"--model\"])),\n prompt,\n ...(options[\"--instructions\"] === undefined ? {} : { instructions: options[\"--instructions\"] }),\n ...(maxOutputTokens === undefined\n ? {}\n : { maxOutputTokens: integerInRange(\"--max-output-tokens\", maxOutputTokens, 1, 1_000_000) }),\n ...(options[\"--reasoning\"] === undefined ? {} : { reasoning: options[\"--reasoning\"] }),\n })) as CallResult\n writeJson({\n callId: result.callId,\n model: result.model.modelId,\n text: result.text,\n finishReason: result.finishReason,\n cost: describeCost(result.cost),\n })\n}\n\nasync function generateImages(api: ApiClient, args: readonly string[]): Promise<void> {\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--output\": \"string\",\n \"--model\": \"string\",\n \"--n\": \"string\",\n \"--size\": \"string\",\n \"--aspect-ratio\": \"string\",\n \"--quality\": \"string\",\n \"--style\": \"string\",\n \"--seed\": \"string\",\n \"--image\": \"strings\",\n },\n \"models image\",\n 1\n )\n const output = requireOutput(options[\"--output\"], \"models image\")\n const seed = options[\"--seed\"]\n if (seed !== undefined && !/^-?[0-9]+$/.test(seed)) fail(\"--seed must be an integer.\")\n const model = await modelRef(api, options[\"--model\"], \"image\")\n const images = []\n for (const path of options[\"--image\"] ?? []) images.push(await uploadInput(api, path, \"image\"))\n const result = (await api.post(\"/api/models/image/generations\", {\n ...model,\n prompt: positionals[0],\n ...(options[\"--n\"] === undefined ? {} : { n: integerInRange(\"--n\", options[\"--n\"], 1, 100) }),\n ...optional(\"size\", options[\"--size\"]),\n ...optional(\"aspectRatio\", options[\"--aspect-ratio\"]),\n ...optional(\"quality\", options[\"--quality\"]),\n ...optional(\"style\", options[\"--style\"]),\n ...(seed === undefined ? {} : { seed: Number(seed) }),\n ...(images.length > 0 ? { images } : {}),\n })) as CallResult\n writeJson(await savedResult(api, result, output))\n}\n\nasync function generateSpeech(api: ApiClient, args: readonly string[]): Promise<void> {\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--output\": \"string\",\n \"--model\": \"string\",\n \"--voice\": \"string\",\n \"--format\": \"string\",\n \"--instructions\": \"string\",\n \"--speed\": \"string\",\n \"--language\": \"string\",\n },\n \"models speech\",\n 1\n )\n const output = requireOutput(options[\"--output\"], \"models speech\")\n const format = options[\"--format\"]\n const speed = options[\"--speed\"]\n if (speed !== undefined && !(Number(speed) > 0)) fail(\"--speed must be a positive number.\")\n const result = (await api.post(\"/api/models/audio/speech\", {\n ...(await modelRef(api, options[\"--model\"], \"speech\")),\n text: positionals[0],\n ...optional(\"voice\", options[\"--voice\"]),\n ...(format === undefined\n ? {}\n : { mediaType: SPEECH_FORMATS[enumValue(\"--format\", format, SPEECH_FORMAT_NAMES)] }),\n ...optional(\"instructions\", options[\"--instructions\"]),\n ...(speed === undefined ? {} : { speed: Number(speed) }),\n ...optional(\"language\", options[\"--language\"]),\n })) as CallResult\n writeJson(await savedResult(api, result, output))\n}\n\nasync function transcribe(api: ApiClient, args: readonly string[]): Promise<void> {\n const { positionals, options } = parseCommandArgs(\n args,\n { \"--model\": \"string\" },\n \"models transcribe\",\n 1\n )\n const model = await modelRef(api, options[\"--model\"], \"transcription\")\n const audio = await uploadInput(api, positionals[0] ?? \"\", \"audio\")\n const result = (await api.post(\"/api/models/audio/transcriptions\", {\n ...model,\n audio,\n })) as CallResult\n writeJson({\n callId: result.callId,\n model: result.model.modelId,\n text: result.text,\n cost: describeCost(result.cost),\n })\n}\n\nasync function calls(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (sub !== \"files\")\n fail(`Unknown models calls command '${sub ?? \"\"}'. Use 'models calls files'.`)\n const { positionals, options } = parseCommandArgs(\n rest,\n { \"--output\": \"string\" },\n \"models calls files\",\n 1\n )\n const callId = positionals[0] ?? \"\"\n const call = (await api.get(`/api/ai/model-calls/${encodeURIComponent(callId)}/files`)) as {\n readonly callId: string\n readonly files: readonly FileRef[]\n }\n const output = options[\"--output\"]\n if (output === undefined) return writeJson(call)\n writeJson({ callId: call.callId, files: await saveFiles(api, call.callId, call.files, output) })\n}\n\n/** A --model reference as the request body names it; absent, the kind's default answers. */\nasync function modelRef(\n api: ApiClient,\n reference: string | undefined,\n kind: ModelKind\n): Promise<{ model?: { provider: string; modelId: string } }> {\n if (reference === undefined) return {}\n const { entry } = findModel(\n catalogEntries((await api.get(\"/api/models\")) as Catalog),\n reference,\n kind\n )\n return { model: { provider: entry.provider, modelId: entry.modelId } }\n}\n\n// The tiers of `models.language`, restated: this package depends on no other Sixb package.\nconst LANGUAGE_TIERS = [\"light\", \"standard\", \"heavy\"] as const\n\n/**\n * A text request's --model: a tier goes to the server as is, which answers with that tier's model,\n * or the default when the project configures no such tier. Anything else names a model.\n */\nasync function languageModelRef(\n api: ApiClient,\n reference: string | undefined\n): Promise<{ model?: string | { provider: string; modelId: string } }> {\n const tier = LANGUAGE_TIERS.find((candidate) => candidate === reference)\n if (tier !== undefined) return { model: tier }\n return modelRef(api, reference, \"language\")\n}\n\n/** The prompt given as an argument, or read from --file: a path, or - for standard input. */\nasync function readPrompt(\n argument: string | undefined,\n source: string | undefined\n): Promise<string> {\n if (argument !== undefined && source !== undefined) {\n fail(\"models text takes its prompt as an argument or from --file, not both.\")\n }\n\n const prompt = source === undefined ? argument : await readText(source, \"Prompt file\")\n if (prompt === undefined) {\n fail('models text requires a prompt: \"<prompt>\", or --file <path|-> to read it.')\n }\n if (!prompt.trim()) fail(\"The prompt is empty.\")\n return prompt\n}\n\nfunction requireOutput(output: string | undefined, command: string): string {\n if (!output) fail(`${command} requires --output <path>: a file, or a directory ending in /.`)\n return output\n}\n\nfunction optional(field: string, value: string | undefined): Record<string, string> {\n return value === undefined ? {} : { [field]: value }\n}\n\nasync function uploadInput(api: ApiClient, path: string, kind: \"image\" | \"audio\") {\n try {\n await access(path)\n } catch {\n fail(`Input file '${path}' does not exist.`)\n }\n const mediaType = MEDIA_TYPES[extname(path).toLowerCase()]\n if (!mediaType?.startsWith(`${kind}/`)) {\n const accepted = Object.entries(MEDIA_TYPES)\n .filter(([, type]) => type.startsWith(`${kind}/`))\n .map(([extension]) => extension)\n fail(`'${path}' is not an ${kind} file. Use ${accepted.join(\", \")}.`)\n }\n return api.upload(\"/api/files\", path, undefined, mediaType)\n}\n\nasync function savedResult(api: ApiClient, result: CallResult, output: string) {\n return {\n callId: result.callId,\n model: result.model.modelId,\n files: await saveFiles(api, result.callId, result.files ?? [], output),\n ...(result.warnings?.length ? { warnings: result.warnings } : {}),\n cost: describeCost(result.cost),\n }\n}\n\n/**\n * Download a call's files. A directory (an existing one, or a path ending in /) receives\n * `<call-id>.<ext>`; a file path is used as given, numbered when there are several. Either way the\n * extension follows the file's media type, so the paths written are the ones returned.\n */\nasync function saveFiles(\n api: ApiClient,\n callId: string,\n files: readonly FileRef[],\n output: string\n): Promise<string[]> {\n const directory = output.endsWith(\"/\") || (await stat(output).catch(() => null))?.isDirectory()\n const paths = files.map((file, index) => {\n const number = files.length > 1 ? `-${index + 1}` : \"\"\n const extension = (file.mediaType && EXTENSIONS[file.mediaType]) ?? \"\"\n if (directory) return join(output, `${callId}${number}${extension || \".bin\"}`)\n const { dir, name, ext } = parse(output)\n return join(dir, `${name}${number}${extension || ext}`)\n })\n for (const [index, path] of paths.entries()) {\n await mkdir(dirname(path), { recursive: true })\n await api.download(`/api/ai/model-calls/${encodeURIComponent(callId)}/files/content`, path, {\n path: `/files/${index}`,\n })\n }\n return paths\n}\n\n/** What a call cost, in USD, as the provider reported it or the binding's card rated it. */\nexport function describeCost(cost: CallResult[\"cost\"]): string {\n if (!cost.money) return \"unknown\"\n const nanos = BigInt(cost.money.amountNanos)\n const whole = nanos / 1_000_000_000n\n const fraction = (nanos % 1_000_000_000n).toString().padStart(9, \"0\").replace(/0+$/, \"\")\n return `$${whole}${fraction ? `.${fraction}` : \"\"}`\n}\n\nfunction modelKind(value: string): ModelKind {\n const kind = MODEL_KINDS.find((candidate) => candidate === value)\n if (!kind) fail(`Unknown model kind '${value}'. Use one of: ${MODEL_KINDS.join(\", \")}.`)\n return kind\n}\n\nfunction catalogEntries(catalog: Catalog): { kind: ModelKind; entry: CatalogEntry }[] {\n return [\n ...catalog.language.map((entry) => ({ kind: \"language\" as const, entry })),\n ...catalog.image.map((entry) => ({ kind: \"image\" as const, entry })),\n ...catalog.audio.speech.map((entry) => ({ kind: \"speech\" as const, entry })),\n ...catalog.audio.transcription.map((entry) => ({ kind: \"transcription\" as const, entry })),\n ]\n}\n\n/**\n * A model by id, or provider:modelId when two providers share an id. An id may itself hold a\n * colon, so the whole reference is tried as an id first. An id that names models of several\n * kinds needs --kind.\n */\nexport function findModel(\n entries: readonly { readonly kind: ModelKind; readonly entry: CatalogEntry }[],\n reference: string,\n kind: ModelKind | undefined\n): { kind: ModelKind; entry: CatalogEntry } {\n const ofKind = entries.filter((candidate) => kind === undefined || candidate.kind === kind)\n let matches = ofKind.filter((candidate) => candidate.entry.modelId === reference)\n const separator = reference.indexOf(\":\")\n if (matches.length === 0 && separator > 0) {\n const provider = reference.slice(0, separator)\n const modelId = reference.slice(separator + 1)\n matches = ofKind.filter(\n (candidate) => candidate.entry.provider === provider && candidate.entry.modelId === modelId\n )\n }\n const [match] = matches\n if (!match) {\n fail(\n `No ${kind === undefined ? \"\" : `${kind} `}model '${reference}' is configured. Run 'sixb models list'.`\n )\n }\n if (matches.length > 1) {\n const kinds = new Set(matches.map((candidate) => candidate.kind))\n fail(\n kinds.size > 1\n ? `'${reference}' is configured as ${[...kinds].join(\" and \")}. Add --kind <kind>.`\n : `'${reference}' is configured by ${matches.map((candidate) => candidate.entry.provider).join(\" and \")}. Use provider:${reference}.`\n )\n }\n return match\n}\n\n/**\n * A rate card as people read it: \"$0.04 per image\", \"per image: $0.041 at 768x768, otherwise\n * $0.048\", \"$3 input · $15 output per 1M tokens\".\n */\nexport function describePrice(card: RateCard | undefined): string {\n if (!card) return \"price unknown\"\n const parts = [\n variantPrice(card.images, \"per image\", \"at\"),\n variantPrice(card.characters, \"per 1M characters\", \"for\"),\n variantPrice(card.audioInputSeconds, \"per second of audio\", \"for\"),\n card.input !== undefined && card.output !== undefined\n ? `${dollars(tokenPrice(card.input))} input · ${dollars(tokenPrice(card.output))} output per 1M tokens`\n : undefined,\n card.audioOutput === undefined\n ? undefined\n : `${dollars(tokenPrice(card.audioOutput))} per 1M audio tokens`,\n ].filter((part): part is string => part !== undefined)\n return parts.length === 0 ? \"price unknown\" : parts.join(\" · \")\n}\n\nfunction variantPrice(\n price: VariantPrice | undefined,\n unit: string,\n joiner: string\n): string | undefined {\n if (price === undefined) return undefined\n if (typeof price === \"string\") return `${dollars(price)} ${unit}`\n // Variants that all cost the default say nothing a single price doesn't.\n const only = price.default\n if (only !== undefined && price.variants.every((variant) => variant.price === only)) {\n return `${dollars(only)} ${unit}`\n }\n const variants = price.variants.map(({ price: amount, ...dimensions }) => {\n const label = Object.values(dimensions).join(\" \")\n return `${dollars(amount)} ${joiner} ${label}`\n })\n const otherwise = price.default === undefined ? [] : [`otherwise ${dollars(price.default)}`]\n return `${unit}: ${[...variants, ...otherwise].join(\", \")}`\n}\n\n// A tiered price reads as its starting rate; `sixb models get` shows the tiers.\nfunction tokenPrice(price: TokenPrice): string {\n return typeof price === \"string\" ? price : price.default\n}\n\nfunction dollars(amount: string): string {\n return `$${amount}`\n}\n",
|
|
13
14
|
"import type { ApiClient } from \"./api-client\"\nimport { CliError, EXIT_API } from \"./output\"\nimport { CLI_LIMITS } from \"./policies\"\n\n/** Build the bounded object graph returned by `objects inspect`. */\n\ninterface ObjectRef {\n readonly objectTypeId: string\n readonly primaryId: string\n}\n\ninterface LocatedRef extends ObjectRef {\n readonly distance: number\n}\n\ninterface MaterializedObject extends ObjectRef {\n readonly createdAt?: unknown\n readonly updatedAt?: unknown\n readonly [key: string]: unknown\n}\n\ninterface PhysicalLink {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n readonly properties?: unknown\n}\n\ninterface LinksResponse {\n readonly objects: MaterializedObject[]\n readonly links: Array<{\n readonly source: ObjectRef\n readonly linkId: string\n readonly target: ObjectRef\n readonly properties?: unknown\n }>\n readonly hasMore: boolean\n readonly nextPageToken?: string\n}\n\ninterface InspectGraphOptions {\n readonly depth: number\n readonly maxObjects: number\n readonly maxLinks: number\n readonly full: boolean\n}\n\nexport async function inspectGraph(\n api: ApiClient,\n objectTypeId: string,\n primaryId: string,\n options: InspectGraphOptions\n): Promise<unknown> {\n if (options.depth === 0) return inspectRoot(api, objectTypeId, primaryId, options)\n\n let refs: LocatedRef[] = [{ objectTypeId, primaryId, distance: 0 }]\n let frontier = refs\n const objects = new Map<string, MaterializedObject>()\n const links = new Map<string, PhysicalLink>()\n let objectsTruncated = false\n let linksTruncated = false\n let pagesTruncated = false\n let pagesRead = 0\n let linksExamined = 0\n\n for (let level = 0; level < options.depth && frontier.length > 0; level += 1) {\n const levelObjects = new Map<string, MaterializedObject>()\n const levelLinks = new Map<string, PhysicalLink>()\n const seenPageTokens = new Set<string>()\n let pageToken: string | undefined\n let continuePaging = true\n\n while (continuePaging) {\n const remainingLinks = options.maxLinks - linksExamined\n if (remainingLinks <= 0) {\n linksTruncated = true\n break\n }\n if (pagesRead >= CLI_LIMITS.inspect.maximumPages) {\n pagesTruncated = true\n break\n }\n const response = asLinksResponse(\n await api.post(\"/api/objects/query/links\", {\n query: {\n kind: \"refs\",\n refs: frontier.map(({ objectTypeId: type, primaryId: id }) => ({\n objectTypeId: type,\n primaryId: id,\n })),\n },\n direction: \"both\",\n includeObjects: true,\n pageSize: Math.min(CLI_LIMITS.linkPage.default, remainingLinks),\n ...(pageToken ? { pageToken } : {}),\n })\n )\n pagesRead += 1\n const pageLinks = response.links.slice(0, remainingLinks)\n linksExamined += pageLinks.length\n linksTruncated ||= response.links.length > pageLinks.length\n const relevantObjects = new Set(frontier.map(refKey))\n for (const link of pageLinks) {\n relevantObjects.add(refKey(link.source))\n relevantObjects.add(refKey(link.target))\n }\n for (const object of response.objects) {\n if (relevantObjects.has(refKey(object))) levelObjects.set(refKey(object), object)\n }\n for (const link of pageLinks) {\n const physical = {\n sourceTypeId: link.source.objectTypeId,\n sourceId: link.source.primaryId,\n linkId: link.linkId,\n targetTypeId: link.target.objectTypeId,\n targetId: link.target.primaryId,\n ...(Object.hasOwn(link, \"properties\") ? { properties: link.properties } : {}),\n }\n levelLinks.set(linkKey(physical), physical)\n }\n if (!response.hasMore) {\n continuePaging = false\n continue\n }\n if (linksExamined >= options.maxLinks) {\n linksTruncated = true\n break\n }\n if (pagesRead >= CLI_LIMITS.inspect.maximumPages) {\n pagesTruncated = true\n break\n }\n if (!response.nextPageToken) {\n invalidApiResponse(\"The object-links API reported another page without a nextPageToken.\")\n }\n if (seenPageTokens.has(response.nextPageToken)) {\n invalidApiResponse(\n \"The object-links API repeated a nextPageToken while inspecting the graph.\"\n )\n }\n seenPageTokens.add(response.nextPageToken)\n pageToken = response.nextPageToken\n }\n\n for (const [key, object] of levelObjects) objects.set(key, object)\n for (const [key, link] of levelLinks) links.set(key, link)\n\n const frontierKeys = new Set(frontier.map(refKey))\n const candidates: LocatedRef[] = []\n for (const link of levelLinks.values()) {\n const source = { objectTypeId: link.sourceTypeId, primaryId: link.sourceId }\n const target = { objectTypeId: link.targetTypeId, primaryId: link.targetId }\n if (frontierKeys.has(refKey(source))) candidates.push({ ...target, distance: level + 1 })\n else if (frontierKeys.has(refKey(target))) candidates.push({ ...source, distance: level + 1 })\n }\n\n const seen = new Set(refs.map(refKey))\n const all = dedupeRefs([...refs, ...candidates])\n objectsTruncated ||= all.length > options.maxObjects\n refs = all.slice(0, options.maxObjects)\n frontier = linksTruncated || pagesTruncated ? [] : refs.filter((ref) => !seen.has(refKey(ref)))\n }\n\n const kept = new Set(refs.map(refKey))\n const filteredLinks = [...links.values()]\n .filter(\n (link) =>\n kept.has(refKey({ objectTypeId: link.sourceTypeId, primaryId: link.sourceId })) &&\n kept.has(refKey({ objectTypeId: link.targetTypeId, primaryId: link.targetId }))\n )\n .sort(compareLinks)\n .map((link) =>\n link.properties == null\n ? {\n sourceTypeId: link.sourceTypeId,\n sourceId: link.sourceId,\n linkId: link.linkId,\n targetTypeId: link.targetTypeId,\n targetId: link.targetId,\n }\n : link\n )\n\n const root = objects.get(refKey({ objectTypeId, primaryId }))\n if (!root) objectNotFound(objectTypeId, primaryId)\n const relatedObjects = refs\n .filter((ref) => ref.distance > 0)\n .flatMap((ref) => {\n const object = objects.get(refKey(ref))\n return object ? [{ ...object, distance: ref.distance }] : []\n })\n\n const objectTypes = options.full\n ? await Promise.all(\n [...new Set(refs.map((ref) => ref.objectTypeId))]\n .sort((left, right) => left.localeCompare(right))\n .map((typeId) => api.get(`/api/object-types/${encodeURIComponent(typeId)}`))\n )\n : undefined\n\n return {\n object: options.full ? root : compactObject(root),\n relatedObjects: options.full ? relatedObjects : relatedObjects.map(compactObject),\n links: filteredLinks,\n graph: {\n depth: options.depth,\n maxObjects: options.maxObjects,\n maxLinks: options.maxLinks,\n maxPages: CLI_LIMITS.inspect.maximumPages,\n objectCount: 1 + relatedObjects.length,\n linkCount: filteredLinks.length,\n pagesRead,\n linksExamined,\n truncated: objectsTruncated || linksTruncated || pagesTruncated,\n truncation: {\n objects: objectsTruncated,\n links: linksTruncated,\n pages: pagesTruncated,\n },\n },\n ...(objectTypes ? { objectTypes } : {}),\n }\n}\n\nasync function inspectRoot(\n api: ApiClient,\n objectTypeId: string,\n primaryId: string,\n options: InspectGraphOptions\n): Promise<unknown> {\n const response = await api.post(\"/api/objects/query\", {\n query: { kind: \"refs\", refs: [{ objectTypeId, primaryId }] },\n includeTotal: false,\n })\n if (typeof response !== \"object\" || response === null || Array.isArray(response)) {\n invalidApiResponse(\"The object query API returned an invalid response.\")\n }\n const rows = (response as Record<string, unknown>).objects\n if (!Array.isArray(rows)) invalidApiResponse(\"The object query API returned an invalid response.\")\n const root = rows.find(\n (value): value is MaterializedObject =>\n isMaterializedObject(value) &&\n value.objectTypeId === objectTypeId &&\n value.primaryId === primaryId\n )\n if (!root) objectNotFound(objectTypeId, primaryId)\n const objectTypes = options.full\n ? [await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`)]\n : undefined\n return {\n object: options.full ? root : compactObject(root),\n relatedObjects: [],\n links: [],\n graph: {\n depth: 0,\n maxObjects: options.maxObjects,\n maxLinks: options.maxLinks,\n maxPages: CLI_LIMITS.inspect.maximumPages,\n objectCount: 1,\n linkCount: 0,\n pagesRead: 0,\n linksExamined: 0,\n truncated: false,\n truncation: { objects: false, links: false, pages: false },\n },\n ...(objectTypes ? { objectTypes } : {}),\n }\n}\n\nfunction asLinksResponse(value: unknown): LinksResponse {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) invalidLinksResponse()\n const record = value as Record<string, unknown>\n if (!Array.isArray(record.objects) || !Array.isArray(record.links)) invalidLinksResponse()\n if (typeof record.hasMore !== \"boolean\") invalidLinksResponse()\n if (record.nextPageToken !== undefined && typeof record.nextPageToken !== \"string\") {\n invalidLinksResponse()\n }\n if (!record.objects.every(isMaterializedObject) || !record.links.every(isPhysicalLinkResponse)) {\n invalidLinksResponse()\n }\n return record as unknown as LinksResponse\n}\n\nfunction invalidLinksResponse(): never {\n invalidApiResponse(\"The object-links API returned an invalid response.\")\n}\n\nfunction invalidApiResponse(message: string): never {\n throw new CliError({ code: \"invalid_api_response\", message }, EXIT_API)\n}\n\nfunction objectNotFound(objectTypeId: string, primaryId: string): never {\n throw new CliError(\n { code: \"not_found\", message: `Object '${objectTypeId}/${primaryId}' was not found.` },\n EXIT_API\n )\n}\n\nfunction isMaterializedObject(value: unknown): value is MaterializedObject {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return typeof record.objectTypeId === \"string\" && typeof record.primaryId === \"string\"\n}\n\nfunction isPhysicalLinkResponse(value: unknown): value is LinksResponse[\"links\"][number] {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return (\n typeof record.linkId === \"string\" && isObjectRef(record.source) && isObjectRef(record.target)\n )\n}\n\nfunction isObjectRef(value: unknown): value is ObjectRef {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false\n const record = value as Record<string, unknown>\n return typeof record.objectTypeId === \"string\" && typeof record.primaryId === \"string\"\n}\n\nfunction compactObject<T extends MaterializedObject>(\n object: T\n): Omit<T, \"createdAt\" | \"updatedAt\"> {\n const { createdAt: _createdAt, updatedAt: _updatedAt, ...compact } = object\n return compact\n}\n\nfunction dedupeRefs(values: LocatedRef[]): LocatedRef[] {\n const unique = new Map<string, LocatedRef>()\n for (const value of values) {\n const key = refKey(value)\n const current = unique.get(key)\n if (!current || value.distance < current.distance) unique.set(key, value)\n }\n return [...unique.values()].sort(\n (left, right) =>\n left.distance - right.distance ||\n left.objectTypeId.localeCompare(right.objectTypeId) ||\n left.primaryId.localeCompare(right.primaryId)\n )\n}\n\nfunction refKey(ref: ObjectRef): string {\n return JSON.stringify([ref.objectTypeId, ref.primaryId])\n}\n\nfunction linkKey(link: PhysicalLink): string {\n return JSON.stringify([\n link.sourceTypeId,\n link.sourceId,\n link.linkId,\n link.targetTypeId,\n link.targetId,\n ])\n}\n\nfunction compareLinks(left: PhysicalLink, right: PhysicalLink): number {\n return linkKey(left).localeCompare(linkKey(right))\n}\n",
|
|
14
|
-
"import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { inspectGraph } from \"../graph\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_LIST_ORDER, DEFAULT_OBJECT_ORDER_BY } from \"../policies\"\nimport { FACETS_EXAMPLE, OBJECTS_HELP, QUERY_EXAMPLES, QUERY_HELP, SEARCH_HELP } from \"./metadata\"\nimport {\n asRecord,\n normalizeWindowOptions,\n parseQueryOptions,\n readJson,\n singleFileOption,\n vectorProfileNames,\n} from \"./shared\"\n\nexport async function objects(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub)) return writeText(OBJECTS_HELP)\n switch (sub) {\n case \"inspect\":\n return objectsInspect(api, rest)\n case \"list\":\n return objectsList(api, rest)\n case \"get\":\n return objectsGet(api, rest)\n case \"search\":\n return objectsSearch(api, rest)\n case \"query\":\n return objectsQuery(api, rest)\n case \"count\":\n case \"exists\":\n return objectsScalar(api, sub, rest)\n case \"facets\":\n return objectsFacets(api, rest)\n case \"links\":\n return objectsLinks(api, rest)\n default:\n fail(`Unknown objects command '${sub}'.`)\n }\n}\n\nasync function objectsInspect(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--full\": \"boolean\",\n \"--depth\": \"string\",\n \"--max-objects\": \"string\",\n \"--max-links\": \"string\",\n },\n \"objects inspect\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const depth = integerInRange(\n \"--depth\",\n options[\"--depth\"] ?? String(CLI_LIMITS.inspect.depth.default),\n 0,\n CLI_LIMITS.inspect.depth.maximum\n )\n const maxObjects = integerInRange(\n \"--max-objects\",\n options[\"--max-objects\"] ?? String(CLI_LIMITS.inspect.objects.default),\n 1,\n CLI_LIMITS.inspect.objects.maximum\n )\n const maxLinks = integerInRange(\n \"--max-links\",\n options[\"--max-links\"] ?? String(CLI_LIMITS.inspect.links.default),\n 1,\n CLI_LIMITS.inspect.links.maximum\n )\n const full = options[\"--full\"] ?? false\n writeJson(\n await inspectGraph(api, objectTypeId, primaryId, {\n depth,\n maxObjects,\n maxLinks,\n full,\n })\n )\n}\n\nasync function objectsList(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const optionNames: Record<string, string> = {\n \"--type\": \"objectTypeId\",\n \"--limit\": \"limit\",\n \"--offset\": \"offset\",\n \"--order-by\": \"orderBy\",\n \"--order\": \"order\",\n \"--id-prefix\": \"idPrefix\",\n \"--id-suffix\": \"idSuffix\",\n \"--created-after\": \"createdAfter\",\n \"--created-before\": \"createdBefore\",\n \"--updated-after\": \"updatedAfter\",\n \"--updated-before\": \"updatedBefore\",\n }\n const options = normalizeWindowOptions(parseQueryOptions(args, optionNames, \"objects list\"), {\n defaultLimit: CLI_LIMITS.list.default,\n maximumLimit: CLI_LIMITS.list.maximum,\n defaultOrder: DEFAULT_LIST_ORDER,\n offset: true,\n })\n options.orderBy = enumValue(\"--order-by\", options.orderBy ?? DEFAULT_OBJECT_ORDER_BY, [\n \"createdAt\",\n \"updatedAt\",\n \"primaryId\",\n ])\n for (const [name, flag] of [\n [\"createdAfter\", \"--created-after\"],\n [\"createdBefore\", \"--created-before\"],\n [\"updatedAfter\", \"--updated-after\"],\n [\"updatedBefore\", \"--updated-before\"],\n ] as const) {\n if (options[name] !== undefined) options[name] = rfc3339Value(flag, options[name])\n }\n requireOrderedRange(\n \"--created-after\",\n options.createdAfter,\n \"--created-before\",\n options.createdBefore\n )\n requireOrderedRange(\n \"--updated-after\",\n options.updatedAfter,\n \"--updated-before\",\n options.updatedBefore\n )\n writeJson(await api.get(\"/api/objects\", options))\n}\n\nasync function objectsGet(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(\"Usage: sixb objects get <object-type> <primary-id>...\")\n const { positionals } = parseCommandArgs(args, {}, \"objects get\", [2, Number.POSITIVE_INFINITY])\n const objectTypeId = positionals[0] ?? \"\"\n writeJson(\n await api.post(\"/api/objects/query\", {\n query: {\n kind: \"refs\",\n refs: positionals.slice(1).map((primaryId) => ({ objectTypeId, primaryId })),\n },\n includeTotal: false,\n })\n )\n}\n\nasync function objectsSearch(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(SEARCH_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n { \"--limit\": \"string\", \"--type\": \"string\", \"--vector-profile\": \"string\" },\n \"objects search\",\n 1\n )\n const text = positionals[0] ?? \"\"\n const limit = integerInRange(\n \"--limit\",\n options[\"--limit\"] ?? String(CLI_LIMITS.search.default),\n 1,\n CLI_LIMITS.search.maximum\n )\n const objectTypeId = options[\"--type\"]\n if (!objectTypeId) {\n if (options[\"--vector-profile\"]) fail(\"--vector-profile requires --type.\")\n return writeJson(await api.get(\"/api/objects/search\", { q: text, limit: String(limit) }))\n }\n if (!text.trim() || text.length > CLI_LIMITS.vectorSearchText.maximum) {\n fail(\n `Semantic search text must be nonempty and at most ${CLI_LIMITS.vectorSearchText.maximum} characters.`\n )\n }\n const objectType = asRecord(\n await api.get(`/api/object-types/${encodeURIComponent(objectTypeId)}`)\n )\n const profile = selectVectorProfile(objectTypeId, objectType, options[\"--vector-profile\"])\n writeJson(\n await api.post(\"/api/objects/query\", {\n query: {\n kind: \"vector\",\n input: { kind: \"start\", objectTypeId },\n vector: text,\n profile,\n k: limit,\n },\n includeTotal: false,\n })\n )\n}\n\n/** Profiles are chosen by name, so a type with several must never be searched by guesswork. */\nfunction selectVectorProfile(\n objectTypeId: string,\n objectType: Record<string, unknown>,\n requested: string | undefined\n): string {\n const profiles = vectorProfileNames(objectType)\n if (profiles.length === 0) {\n fail(\n `${objectTypeId} has no vector search profile.`,\n \"invalid_arguments\",\n \"Omit --type for identifier and full-text search.\"\n )\n }\n if (requested !== undefined) {\n if (!profiles.includes(requested)) {\n fail(`${objectTypeId} has no vector profile '${requested}'. Use ${profiles.join(\", \")}.`)\n }\n return requested\n }\n if (profiles.length > 1) {\n fail(\n `${objectTypeId} has vector profiles ${profiles.join(\", \")}. Pass --vector-profile <name>.`\n )\n }\n return profiles[0] ?? \"\"\n}\n\nasync function objectsQuery(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(QUERY_HELP)\n const { options } = parseCommandArgs(\n args,\n {\n \"--example\": \"string\",\n \"--file\": \"string\",\n \"--include-total\": \"boolean\",\n \"--no-total\": \"boolean\",\n },\n \"objects query\"\n )\n if (options[\"--include-total\"] && options[\"--no-total\"])\n fail(\"--include-total and --no-total cannot be used together.\")\n if (options[\"--example\"]) {\n if (Object.keys(options).length !== 1) fail(\"--example cannot be combined with query options.\")\n const name = options[\"--example\"]\n if (name === \"list\") return writeText(Object.keys(QUERY_EXAMPLES).join(\" \"))\n const example = QUERY_EXAMPLES[name]\n if (!example) fail(`Unknown query example '${name}'. Run 'sixb objects query --example list'.`)\n return writeText(example)\n }\n const source = options[\"--file\"]\n const includeTotal = options[\"--include-total\"] ?? false\n if (!source) fail(\"objects query requires --file <path|->.\")\n const input = await readJson(source)\n const record = asRecord(input)\n const body = Object.hasOwn(record, \"query\")\n ? { ...record, ...(Object.hasOwn(record, \"includeTotal\") ? {} : { includeTotal }) }\n : { query: input, includeTotal }\n writeJson(await api.post(\"/api/objects/query\", body))\n}\n\nasync function objectsScalar(\n api: ApiClient,\n operation: \"count\" | \"exists\",\n args: readonly string[]\n): Promise<void> {\n if (requestsHelp(args)) return writeText(`Usage: sixb objects ${operation} --file <path|->`)\n const source = singleFileOption(args, `objects ${operation}`)\n const input = await readJson(source)\n const record = asRecord(input)\n writeJson(\n await api.post(`/api/objects/query/${operation}`, {\n query: Object.hasOwn(record, \"query\") ? record.query : input,\n })\n )\n}\n\nasync function objectsFacets(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) {\n return writeText(\n \"Usage: sixb objects facets --file <path|->\\n sixb objects facets --example\"\n )\n }\n const { options } = parseCommandArgs(\n args,\n { \"--file\": \"string\", \"--example\": \"boolean\" },\n \"objects facets\"\n )\n if (options[\"--example\"]) {\n if (options[\"--file\"]) fail(\"--example cannot be combined with --file.\")\n return writeText(FACETS_EXAMPLE)\n }\n if (!options[\"--file\"]) fail(\"objects facets requires --file <path|->.\")\n const body = await readJson(options[\"--file\"])\n const record = asRecord(body)\n if (!Object.hasOwn(record, \"query\") || !Object.hasOwn(record, \"facets\")) {\n fail(\"objects facets input must contain query and facets.\")\n }\n writeJson(await api.post(\"/api/objects/query/facets\", body))\n}\n\nasync function objectsLinks(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(OBJECTS_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n {\n \"--link\": \"string\",\n \"--direction\": \"string\",\n \"--page-size\": \"string\",\n \"--page-token\": \"string\",\n \"--include-objects\": \"boolean\",\n },\n \"objects links\",\n 2\n )\n const objectTypeId = positionals[0] ?? \"\"\n const primaryId = positionals[1] ?? \"\"\n const linkId = options[\"--link\"]\n const direction = enumValue(\"--direction\", options[\"--direction\"] ?? \"both\", [\n \"outgoing\",\n \"incoming\",\n \"both\",\n ])\n const pageSize = integerInRange(\n \"--page-size\",\n options[\"--page-size\"] ?? String(CLI_LIMITS.linkPage.default),\n 1,\n CLI_LIMITS.linkPage.maximum\n )\n const pageToken = options[\"--page-token\"]\n const includeObjects = options[\"--include-objects\"] ?? false\n writeJson(\n await api.post(\"/api/objects/query/links\", {\n query: { kind: \"refs\", refs: [{ objectTypeId, primaryId }] },\n direction,\n includeObjects,\n pageSize,\n ...(linkId ? { linkId } : {}),\n ...(pageToken ? { pageToken } : {}),\n })\n )\n}\n",
|
|
15
|
+
"import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n parseCommandArgs,\n requestsHelp,\n requireOrderedRange,\n rfc3339Value,\n} from \"../arguments\"\nimport { inspectGraph } from \"../graph\"\nimport { CliError, fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS, DEFAULT_LIST_ORDER, DEFAULT_OBJECT_ORDER_BY } from \"../policies\"\nimport {\n FACETS_EXAMPLE,\n GET_BY_HELP,\n OBJECTS_HELP,\n QUERY_EXAMPLES,\n QUERY_HELP,\n SEARCH_HELP,\n} 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 \"get-by\":\n return objectsGetBy(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\n/** Prints the object holding the value, or `null` when none does or its type is not visible. */\nasync function objectsGetBy(api: ApiClient, args: readonly string[]): Promise<void> {\n if (requestsHelp(args)) return writeText(GET_BY_HELP)\n const { positionals, options } = parseCommandArgs(\n args,\n { \"--json\": \"boolean\" },\n \"objects get-by\",\n 3\n )\n const [objectTypeId = \"\", propertyId = \"\", text = \"\"] = positionals\n const value = options[\"--json\"] ? parseJsonValue(text) : text\n\n const path = `/api/objects/${encodeURIComponent(objectTypeId)}/by/${encodeURIComponent(propertyId)}`\n try {\n writeJson(await api.post(path, { value }))\n } catch (error) {\n if (!isObjectNotFound(error)) throw error\n writeJson(null)\n }\n}\n\nfunction parseJsonValue(text: string): unknown {\n try {\n return JSON.parse(text)\n } catch {\n fail('--json needs the value as JSON, such as 42 or \\'{\"type\":\"user\",\"id\":\"usr_1\"}\\'.')\n }\n}\n\n/** The route's own answer when no visible object holds the value. */\nfunction isObjectNotFound(error: unknown): boolean {\n return (\n error instanceof CliError && error.body.status === 404 && error.body.code === \"object.not_found\"\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
16
|
"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
17
|
"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 = [\"
|
|
18
|
+
"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
19
|
"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
|
-
"import type { ApiClient } from \"../api-client\"\nimport {
|
|
20
|
-
"import
|
|
20
|
+
"import type { ApiClient } from \"../api-client\"\nimport {\n enumValue,\n integerInRange,\n isHelp,\n nonNegativeInteger,\n parseCommandArgs,\n requestsHelp,\n} from \"../arguments\"\nimport { fail, writeJson, writeText } from \"../output\"\nimport { CLI_LIMITS } from \"../policies\"\nimport { GROUP_HELP } from \"./metadata\"\nimport type { QueryOptions } from \"./shared\"\n\nconst USER_STATUSES = [\"active\", \"suspended\", \"all\"] as const\n\nconst LIST_FLAGS = {\n \"--status\": \"string\",\n \"--limit\": \"string\",\n \"--offset\": \"string\",\n} as const\n\nexport async function users(api: ApiClient, args: readonly string[]): Promise<void> {\n const [sub, ...rest] = args\n if (!sub || isHelp(sub) || requestsHelp(rest)) return writeText(GROUP_HELP.users)\n\n if (sub === \"get\") {\n const { positionals } = parseCommandArgs(rest, {}, \"users get\", 1)\n return writeJson(await api.get(`/api/users/${encodeURIComponent(positionals[0] ?? \"\")}`))\n }\n\n if (sub === \"list\") {\n const { options } = parseCommandArgs(rest, LIST_FLAGS, \"users list\")\n return writeJson(await api.get(\"/api/users\", listQuery(options)))\n }\n\n if (sub === \"search\") {\n const { positionals, options } = parseCommandArgs(rest, LIST_FLAGS, \"users search\", 1)\n const search = positionals[0]?.trim()\n if (!search) fail(\"users search requires the text to find in a name or email.\")\n\n return writeJson(await api.get(\"/api/users\", { ...listQuery(options), search }))\n }\n\n fail(`Unknown users command '${sub}'.`)\n}\n\nfunction listQuery(options: {\n readonly \"--status\"?: string\n readonly \"--limit\"?: string\n readonly \"--offset\"?: string\n}): QueryOptions {\n const limit = integerInRange(\n \"--limit\",\n options[\"--limit\"] ?? String(CLI_LIMITS.users.default),\n 1,\n CLI_LIMITS.users.maximum\n )\n\n return {\n status: enumValue(\"--status\", options[\"--status\"] ?? \"active\", USER_STATUSES),\n limit: String(limit),\n ...(options[\"--offset\"] === undefined\n ? {}\n : { offset: String(nonNegativeInteger(\"--offset\", options[\"--offset\"])) }),\n }\n}\n",
|
|
21
|
+
"import { randomUUID } from \"node:crypto\"\nimport type { ApiClient } from \"../api-client\"\nimport { isHelp, parseCommandArgs, requestsHelp } from \"../arguments\"\nimport { fail, writeJson, writeRequestResult, 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\", \"--run-id\": \"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 // Every start names its run, so a repeated request returns the same run instead of another.\n const runId = options[\"--run-id\"] ?? `run_${randomUUID()}`\n return writeRequestResult(\n await api.post(`/api/workflows/${encodeURIComponent(workflowId ?? \"\")}/runs`, {\n input,\n runId,\n })\n )\n }\n fail(`Unknown workflows command '${sub}'.`)\n}\n",
|
|
22
|
+
"import type { ApiClient } from \"../api-client\"\nimport { fail } from \"../output\"\nimport { actions } from \"./actions\"\nimport { files } from \"./files\"\nimport { models } from \"./models\"\nimport { objects } from \"./objects\"\nimport { ontology } from \"./ontology\"\nimport { project } from \"./project\"\nimport { runs } from \"./runs\"\nimport { telemetry } from \"./telemetry\"\nimport { users } from \"./users\"\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 \"users\",\n \"models\",\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 case \"users\":\n return users(api, args)\n case \"models\":\n return models(api, args)\n default:\n fail(`Unknown command '${command}'. Run 'sixb --help'.`)\n }\n}\n",
|
|
21
23
|
"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
24
|
],
|
|
23
|
-
"mappings": "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",
|
|
24
|
-
"debugId": "
|
|
25
|
+
"mappings": "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",
|
|
26
|
+
"debugId": "7F5CD0F40A1B96CA64756E2164756E21",
|
|
25
27
|
"names": []
|
|
26
28
|
}
|