@codexhost/cli-darwin-x64 0.9.1 → 0.10.0

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.
@@ -27108,6 +27108,61 @@ function date4(params) {
27108
27108
  // ../../../node_modules/zod/v4/classic/external.js
27109
27109
  config(en_default());
27110
27110
 
27111
+ // ../../shared-contracts/dist/credential-imports.js
27112
+ var credentialSourceSchema = external_exports.object({
27113
+ id: external_exports.string().min(1).max(256),
27114
+ harnessId: external_exports.string().min(1),
27115
+ label: external_exports.string().min(1).max(512),
27116
+ provider: external_exports.enum(["openai-codex", "xai"])
27117
+ }).strict();
27118
+ var credentialImportNameSchema = external_exports.string().regex(/^[a-z][a-z0-9-]{0,47}$/);
27119
+ var credentialImportRecordSchema = external_exports.object({
27120
+ name: credentialImportNameSchema,
27121
+ source: credentialSourceSchema,
27122
+ importedAt: external_exports.string()
27123
+ }).strict();
27124
+ var credentialImportsRequestSchema = external_exports.discriminatedUnion("action", [
27125
+ external_exports.object({ action: external_exports.literal("list") }).strict(),
27126
+ external_exports.object({
27127
+ action: external_exports.literal("import"),
27128
+ sourceId: external_exports.string().min(1).max(256),
27129
+ name: credentialImportNameSchema,
27130
+ confirmed: external_exports.literal(true)
27131
+ }).strict(),
27132
+ external_exports.object({
27133
+ action: external_exports.literal("reimport"),
27134
+ sourceId: external_exports.string().min(1).max(256),
27135
+ name: credentialImportNameSchema,
27136
+ confirmed: external_exports.literal(true)
27137
+ }).strict(),
27138
+ external_exports.object({
27139
+ action: external_exports.literal("remove"),
27140
+ name: credentialImportNameSchema,
27141
+ confirmed: external_exports.literal(true)
27142
+ }).strict()
27143
+ ]);
27144
+ var credentialOtherLoginSchema = external_exports.object({
27145
+ provider: external_exports.string().min(1).max(128),
27146
+ type: external_exports.enum(["oauth", "api_key", "unknown"]),
27147
+ /** Best-effort account label (e.g. the email in a Codex token), derived locally when present. */
27148
+ label: external_exports.string().min(1).max(512).optional(),
27149
+ /** Recognized credential vendor, derived from the OAuth token issuer. Absent when unknown. */
27150
+ vendor: external_exports.enum(["openai-codex", "xai"]).optional()
27151
+ }).strict();
27152
+ var credentialImportsResultSchema = external_exports.object({
27153
+ sources: external_exports.array(credentialSourceSchema),
27154
+ targets: external_exports.array(external_exports.object({
27155
+ harnessId: external_exports.string(),
27156
+ providers: external_exports.array(external_exports.enum(["openai-codex", "xai"])),
27157
+ imports: external_exports.array(credentialImportRecordSchema),
27158
+ others: external_exports.array(credentialOtherLoginSchema).default([])
27159
+ }).strict())
27160
+ }).strict();
27161
+ var credentialImportsParamsSchema = external_exports.object({
27162
+ targetHarnessId: external_exports.string().min(1).max(128).optional(),
27163
+ request: credentialImportsRequestSchema
27164
+ }).strict();
27165
+
27111
27166
  // ../../shared-contracts/dist/version.js
27112
27167
  var WORKSPACE_CONTRACT_VERSION = 1;
27113
27168
 
@@ -27811,10 +27866,21 @@ var harnessCommandDescriptorSchema = external_exports.object({
27811
27866
  invocation: commandInvocationSchema,
27812
27867
  label: commandLabelSchema,
27813
27868
  description: commandDescriptionSchema.optional(),
27814
- argumentMode: external_exports.enum(["none", "text"])
27869
+ argumentMode: external_exports.enum(["none", "text"]),
27870
+ /**
27871
+ * Native distinction reported by the Harness. Omitted when the Harness does
27872
+ * not tell skills and commands apart; consumers treat that as "command".
27873
+ */
27874
+ kind: external_exports.enum(["command", "skill"]).optional()
27815
27875
  }).strict();
27816
27876
  var harnessCommandCatalogSchema = external_exports.object({
27817
- commands: external_exports.array(harnessCommandDescriptorSchema)
27877
+ commands: external_exports.array(harnessCommandDescriptorSchema),
27878
+ /**
27879
+ * `live` when the catalog includes what a native Session reports for its
27880
+ * workspace (custom commands, skills); `static` for Adapter built-ins only.
27881
+ * Omitted by Adapters; set by the Host on inspection results.
27882
+ */
27883
+ source: external_exports.enum(["live", "static"]).optional()
27818
27884
  }).strict().superRefine((catalog, context) => {
27819
27885
  const ids = /* @__PURE__ */ new Set();
27820
27886
  for (const [index, command] of catalog.commands.entries()) {
@@ -27828,7 +27894,11 @@ var harnessCommandCatalogSchema = external_exports.object({
27828
27894
  ids.add(command.id);
27829
27895
  }
27830
27896
  });
27831
- var harnessCommandsInspectParamsSchema = external_exports.object({ harnessId: harnessIdSchema }).strict();
27897
+ var harnessCommandsInspectParamsSchema = external_exports.object({
27898
+ harnessId: harnessIdSchema,
27899
+ /** Workspace of a draft without a Thread, for its live catalog when known. */
27900
+ cwd: external_exports.string().min(1).optional()
27901
+ }).strict();
27832
27902
  var threadCommandsInspectParamsSchema = external_exports.object({
27833
27903
  threadId: hostThreadIdSchema
27834
27904
  }).strict();
@@ -28398,6 +28468,265 @@ function mapQoderException(error51) {
28398
28468
  };
28399
28469
  }
28400
28470
 
28471
+ // ../../harness-adapter/dist/approval.js
28472
+ function invalidRequest(message) {
28473
+ return { code: "invalidRequest", message, retryable: false };
28474
+ }
28475
+ function validateHostApprovalResponse(interaction, response) {
28476
+ return interaction.actions.some(({ id }) => id === response.actionId) ? null : invalidRequest("Approval Response contains an undeclared action ID");
28477
+ }
28478
+
28479
+ // ../../harness-adapter/dist/question.js
28480
+ function invalidRequest2(message) {
28481
+ return { code: "invalidRequest", message, retryable: false };
28482
+ }
28483
+ function validateHostQuestionResponse(interaction, response) {
28484
+ const questionIds = new Set(interaction.questions.map(({ id }) => id));
28485
+ if (response.cancelled) {
28486
+ return Object.keys(response.answers).length === 0 ? null : invalidRequest2("Cancelled Question Response must not contain answers");
28487
+ }
28488
+ for (const answerId of Object.keys(response.answers)) {
28489
+ if (!questionIds.has(answerId)) {
28490
+ return invalidRequest2("Question Response contains an unknown Question ID");
28491
+ }
28492
+ }
28493
+ for (const question of interaction.questions) {
28494
+ const answers = response.answers[question.id] ?? [];
28495
+ if (!question.optional && answers.length === 0) {
28496
+ return invalidRequest2("Question Response omits a required answer");
28497
+ }
28498
+ if (question.type === "text") {
28499
+ if (answers.length > 1) {
28500
+ return invalidRequest2("Text Question accepts at most one answer");
28501
+ }
28502
+ continue;
28503
+ }
28504
+ if (!question.multiple && answers.length > 1) {
28505
+ return invalidRequest2("Single-choice Question accepts at most one answer");
28506
+ }
28507
+ const declared = new Set(question.options.map(({ value }) => value));
28508
+ if (!question.allowOther && answers.some((answer) => !declared.has(answer))) {
28509
+ return invalidRequest2("Question Response contains an undeclared choice");
28510
+ }
28511
+ }
28512
+ return null;
28513
+ }
28514
+
28515
+ // ../../harness-adapter/dist/output-channel.js
28516
+ var HarnessOutputChannel = class {
28517
+ outputs;
28518
+ #consumerCreated = false;
28519
+ #ended = false;
28520
+ #pending = [];
28521
+ #values = [];
28522
+ constructor() {
28523
+ this.outputs = {
28524
+ [Symbol.asyncIterator]: () => {
28525
+ if (this.#consumerCreated) {
28526
+ throw new Error("Harness outputs allow only one consumer");
28527
+ }
28528
+ this.#consumerCreated = true;
28529
+ return {
28530
+ next: () => this.#next()
28531
+ };
28532
+ }
28533
+ };
28534
+ }
28535
+ emit(value) {
28536
+ if (this.#ended)
28537
+ return false;
28538
+ const resolve = this.#pending.shift();
28539
+ if (resolve)
28540
+ resolve({ done: false, value });
28541
+ else
28542
+ this.#values.push(value);
28543
+ return true;
28544
+ }
28545
+ end() {
28546
+ if (this.#ended)
28547
+ return;
28548
+ this.#ended = true;
28549
+ if (this.#values.length !== 0)
28550
+ return;
28551
+ for (const resolve of this.#pending.splice(0))
28552
+ resolve({ done: true, value: void 0 });
28553
+ }
28554
+ #next() {
28555
+ const value = this.#values.shift();
28556
+ if (value !== void 0)
28557
+ return Promise.resolve({ done: false, value });
28558
+ if (this.#ended)
28559
+ return Promise.resolve({ done: true, value: void 0 });
28560
+ return new Promise((resolve) => this.#pending.push(resolve));
28561
+ }
28562
+ };
28563
+
28564
+ // ../../harness-adapter/dist/usage.js
28565
+ var tokenFields = [
28566
+ "inputTokens",
28567
+ "cachedInputTokens",
28568
+ "cacheWriteInputTokens",
28569
+ "outputTokens",
28570
+ "outputTokensPerSecond",
28571
+ "reasoningOutputTokens",
28572
+ "totalTokens",
28573
+ "contextWindowTokens",
28574
+ "contextUsedTokens"
28575
+ ];
28576
+ var safeIntegerFields = [
28577
+ "planFiveHourResetsAtUnix",
28578
+ "planSevenDayResetsAtUnix"
28579
+ ];
28580
+ var percentFields = [
28581
+ "cacheHitRatePercent",
28582
+ "planFiveHourUsedPercent",
28583
+ "planSevenDayUsedPercent"
28584
+ ];
28585
+ var usageFields = /* @__PURE__ */ new Set([
28586
+ ...tokenFields,
28587
+ ...safeIntegerFields,
28588
+ ...percentFields,
28589
+ "totalCostUsd",
28590
+ "totalCredits",
28591
+ "contextUsagePercent"
28592
+ ]);
28593
+ function isRecord(value) {
28594
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28595
+ }
28596
+ function parseHostUsage(value) {
28597
+ if (!isRecord(value))
28598
+ throw new Error("Harness Usage must be an object");
28599
+ const keys = Object.keys(value);
28600
+ if (keys.length === 0)
28601
+ throw new Error("Harness Usage must contain a reliable field");
28602
+ for (const key of keys) {
28603
+ if (!usageFields.has(key)) {
28604
+ throw new Error(`Harness Usage contains unknown field '${key}'`);
28605
+ }
28606
+ }
28607
+ for (const field of ["totalCredits", "contextUsagePercent"]) {
28608
+ const candidate = value[field];
28609
+ if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
28610
+ throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
28611
+ }
28612
+ }
28613
+ for (const field of tokenFields) {
28614
+ const candidate = value[field];
28615
+ if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
28616
+ throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
28617
+ }
28618
+ }
28619
+ for (const field of safeIntegerFields) {
28620
+ const candidate = value[field];
28621
+ if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
28622
+ throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
28623
+ }
28624
+ }
28625
+ if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
28626
+ throw new Error("Harness Usage 'outputTokensPerSecond' must be a finite non-negative number");
28627
+ }
28628
+ if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
28629
+ throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
28630
+ }
28631
+ for (const field of percentFields) {
28632
+ const candidate = value[field];
28633
+ if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
28634
+ throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
28635
+ }
28636
+ }
28637
+ const hasContextUsed = value.contextUsedTokens !== void 0;
28638
+ const hasContextWindow = value.contextWindowTokens !== void 0;
28639
+ if (hasContextUsed !== hasContextWindow) {
28640
+ throw new Error("Harness Usage context fields must be provided together");
28641
+ }
28642
+ if (hasContextWindow && value.contextWindowTokens === 0) {
28643
+ throw new Error("Harness Usage 'contextWindowTokens' must be greater than zero");
28644
+ }
28645
+ if (value.planFiveHourResetsAtUnix !== void 0 && value.planFiveHourUsedPercent === void 0) {
28646
+ throw new Error("Harness Usage 'planFiveHourResetsAtUnix' must be provided with 'planFiveHourUsedPercent'");
28647
+ }
28648
+ if (value.planSevenDayResetsAtUnix !== void 0 && value.planSevenDayUsedPercent === void 0) {
28649
+ throw new Error("Harness Usage 'planSevenDayResetsAtUnix' must be provided with 'planSevenDayUsedPercent'");
28650
+ }
28651
+ return { ...value };
28652
+ }
28653
+
28654
+ // ../../harness-adapter/dist/live-command-catalog.js
28655
+ var COMMON_EXCLUDED_LIVE_COMMANDS = /* @__PURE__ */ new Set([
28656
+ // Session lifecycle
28657
+ "branch",
28658
+ "clear",
28659
+ "exit",
28660
+ "fork",
28661
+ "fresh",
28662
+ "new",
28663
+ "quit",
28664
+ "rename",
28665
+ "rename-chat",
28666
+ "reset",
28667
+ "resume",
28668
+ "rewind",
28669
+ "session",
28670
+ "sessions",
28671
+ // Desktop-owned configuration
28672
+ "autocompact",
28673
+ "color",
28674
+ "config",
28675
+ "effort",
28676
+ "fast",
28677
+ "keybindings",
28678
+ "model",
28679
+ "models",
28680
+ "output-style",
28681
+ "permissions",
28682
+ "settings",
28683
+ "statusline",
28684
+ "terminal-setup",
28685
+ "theme",
28686
+ "vim",
28687
+ // Trust and approval policy
28688
+ "always-approve",
28689
+ "auto-mode-setup",
28690
+ // Native login
28691
+ "login",
28692
+ "logout",
28693
+ // Work outliving the Turn
28694
+ "autopilot",
28695
+ "background",
28696
+ "bg",
28697
+ "goal",
28698
+ "jobs",
28699
+ "loop",
28700
+ "multitask",
28701
+ "queue",
28702
+ "remote-control",
28703
+ "schedule",
28704
+ "steer",
28705
+ // Native terminal UI
28706
+ "copy",
28707
+ "debug",
28708
+ "feedback",
28709
+ "heapdump",
28710
+ "share",
28711
+ "shell",
28712
+ // Plugin and MCP management
28713
+ "marketplace",
28714
+ "mcp",
28715
+ "plugins",
28716
+ "reload-plugins"
28717
+ ]);
28718
+ var COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES = ["__", "hooks-"];
28719
+ function isExcludedLiveCommand(name, kind, extra = {}) {
28720
+ const normalized = name.trim().replace(/^\//u, "");
28721
+ if (new Set(extra.names ?? []).has(normalized))
28722
+ return true;
28723
+ if (extra.prefixes?.some((prefix) => normalized.startsWith(prefix)))
28724
+ return true;
28725
+ if (kind === "skill")
28726
+ return false;
28727
+ return COMMON_EXCLUDED_LIVE_COMMANDS.has(normalized) || COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES.some((prefix) => normalized.startsWith(prefix));
28728
+ }
28729
+
28401
28730
  // dist/qoder-slash-commands.js
28402
28731
  var QODER_FALLBACK_COMMAND_CATALOG = harnessCommandCatalogSchema.parse({
28403
28732
  commands: [
@@ -28436,7 +28765,7 @@ function mapQoderSlashCommands(commands) {
28436
28765
  if (typeof rawName !== "string")
28437
28766
  continue;
28438
28767
  const cleanName = rawName.replace(/^\//, "").trim().toLowerCase();
28439
- if (!cleanName)
28768
+ if (!cleanName || isExcludedLiveCommand(cleanName, "command"))
28440
28769
  continue;
28441
28770
  const id = `qoder.${cleanName}`;
28442
28771
  if (seenIds.has(id))
@@ -29034,189 +29363,6 @@ function mapToQoderPermissionMode(id) {
29034
29363
  // dist/qoder-sdk-transport.js
29035
29364
  import { randomUUID } from "node:crypto";
29036
29365
 
29037
- // ../../harness-adapter/dist/approval.js
29038
- function invalidRequest(message) {
29039
- return { code: "invalidRequest", message, retryable: false };
29040
- }
29041
- function validateHostApprovalResponse(interaction, response) {
29042
- return interaction.actions.some(({ id }) => id === response.actionId) ? null : invalidRequest("Approval Response contains an undeclared action ID");
29043
- }
29044
-
29045
- // ../../harness-adapter/dist/question.js
29046
- function invalidRequest2(message) {
29047
- return { code: "invalidRequest", message, retryable: false };
29048
- }
29049
- function validateHostQuestionResponse(interaction, response) {
29050
- const questionIds = new Set(interaction.questions.map(({ id }) => id));
29051
- if (response.cancelled) {
29052
- return Object.keys(response.answers).length === 0 ? null : invalidRequest2("Cancelled Question Response must not contain answers");
29053
- }
29054
- for (const answerId of Object.keys(response.answers)) {
29055
- if (!questionIds.has(answerId)) {
29056
- return invalidRequest2("Question Response contains an unknown Question ID");
29057
- }
29058
- }
29059
- for (const question of interaction.questions) {
29060
- const answers = response.answers[question.id] ?? [];
29061
- if (!question.optional && answers.length === 0) {
29062
- return invalidRequest2("Question Response omits a required answer");
29063
- }
29064
- if (question.type === "text") {
29065
- if (answers.length > 1) {
29066
- return invalidRequest2("Text Question accepts at most one answer");
29067
- }
29068
- continue;
29069
- }
29070
- if (!question.multiple && answers.length > 1) {
29071
- return invalidRequest2("Single-choice Question accepts at most one answer");
29072
- }
29073
- const declared = new Set(question.options.map(({ value }) => value));
29074
- if (!question.allowOther && answers.some((answer) => !declared.has(answer))) {
29075
- return invalidRequest2("Question Response contains an undeclared choice");
29076
- }
29077
- }
29078
- return null;
29079
- }
29080
-
29081
- // ../../harness-adapter/dist/output-channel.js
29082
- var HarnessOutputChannel = class {
29083
- outputs;
29084
- #consumerCreated = false;
29085
- #ended = false;
29086
- #pending = [];
29087
- #values = [];
29088
- constructor() {
29089
- this.outputs = {
29090
- [Symbol.asyncIterator]: () => {
29091
- if (this.#consumerCreated) {
29092
- throw new Error("Harness outputs allow only one consumer");
29093
- }
29094
- this.#consumerCreated = true;
29095
- return {
29096
- next: () => this.#next()
29097
- };
29098
- }
29099
- };
29100
- }
29101
- emit(value) {
29102
- if (this.#ended)
29103
- return false;
29104
- const resolve = this.#pending.shift();
29105
- if (resolve)
29106
- resolve({ done: false, value });
29107
- else
29108
- this.#values.push(value);
29109
- return true;
29110
- }
29111
- end() {
29112
- if (this.#ended)
29113
- return;
29114
- this.#ended = true;
29115
- if (this.#values.length !== 0)
29116
- return;
29117
- for (const resolve of this.#pending.splice(0))
29118
- resolve({ done: true, value: void 0 });
29119
- }
29120
- #next() {
29121
- const value = this.#values.shift();
29122
- if (value !== void 0)
29123
- return Promise.resolve({ done: false, value });
29124
- if (this.#ended)
29125
- return Promise.resolve({ done: true, value: void 0 });
29126
- return new Promise((resolve) => this.#pending.push(resolve));
29127
- }
29128
- };
29129
-
29130
- // ../../harness-adapter/dist/usage.js
29131
- var tokenFields = [
29132
- "inputTokens",
29133
- "cachedInputTokens",
29134
- "cacheWriteInputTokens",
29135
- "outputTokens",
29136
- "outputTokensPerSecond",
29137
- "reasoningOutputTokens",
29138
- "totalTokens",
29139
- "contextWindowTokens",
29140
- "contextUsedTokens"
29141
- ];
29142
- var safeIntegerFields = [
29143
- "planFiveHourResetsAtUnix",
29144
- "planSevenDayResetsAtUnix"
29145
- ];
29146
- var percentFields = [
29147
- "cacheHitRatePercent",
29148
- "planFiveHourUsedPercent",
29149
- "planSevenDayUsedPercent"
29150
- ];
29151
- var usageFields = /* @__PURE__ */ new Set([
29152
- ...tokenFields,
29153
- ...safeIntegerFields,
29154
- ...percentFields,
29155
- "totalCostUsd",
29156
- "totalCredits",
29157
- "contextUsagePercent"
29158
- ]);
29159
- function isRecord(value) {
29160
- return typeof value === "object" && value !== null && !Array.isArray(value);
29161
- }
29162
- function parseHostUsage(value) {
29163
- if (!isRecord(value))
29164
- throw new Error("Harness Usage must be an object");
29165
- const keys = Object.keys(value);
29166
- if (keys.length === 0)
29167
- throw new Error("Harness Usage must contain a reliable field");
29168
- for (const key of keys) {
29169
- if (!usageFields.has(key)) {
29170
- throw new Error(`Harness Usage contains unknown field '${key}'`);
29171
- }
29172
- }
29173
- for (const field of ["totalCredits", "contextUsagePercent"]) {
29174
- const candidate = value[field];
29175
- if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
29176
- throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
29177
- }
29178
- }
29179
- for (const field of tokenFields) {
29180
- const candidate = value[field];
29181
- if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29182
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29183
- }
29184
- }
29185
- for (const field of safeIntegerFields) {
29186
- const candidate = value[field];
29187
- if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29188
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29189
- }
29190
- }
29191
- if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
29192
- throw new Error("Harness Usage 'outputTokensPerSecond' must be a finite non-negative number");
29193
- }
29194
- if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
29195
- throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
29196
- }
29197
- for (const field of percentFields) {
29198
- const candidate = value[field];
29199
- if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
29200
- throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
29201
- }
29202
- }
29203
- const hasContextUsed = value.contextUsedTokens !== void 0;
29204
- const hasContextWindow = value.contextWindowTokens !== void 0;
29205
- if (hasContextUsed !== hasContextWindow) {
29206
- throw new Error("Harness Usage context fields must be provided together");
29207
- }
29208
- if (hasContextWindow && value.contextWindowTokens === 0) {
29209
- throw new Error("Harness Usage 'contextWindowTokens' must be greater than zero");
29210
- }
29211
- if (value.planFiveHourResetsAtUnix !== void 0 && value.planFiveHourUsedPercent === void 0) {
29212
- throw new Error("Harness Usage 'planFiveHourResetsAtUnix' must be provided with 'planFiveHourUsedPercent'");
29213
- }
29214
- if (value.planSevenDayResetsAtUnix !== void 0 && value.planSevenDayUsedPercent === void 0) {
29215
- throw new Error("Harness Usage 'planSevenDayResetsAtUnix' must be provided with 'planSevenDayUsedPercent'");
29216
- }
29217
- return { ...value };
29218
- }
29219
-
29220
29366
  // ../../../node_modules/@qoder-ai/qoder-agent-sdk/dist/index.js
29221
29367
  var dist_exports = {};
29222
29368
  __export(dist_exports, {
@@ -51900,6 +52046,7 @@ var QoderAdapter = class {
51900
52046
  harnessId;
51901
52047
  #variant;
51902
52048
  commandCatalog = QODER_FALLBACK_COMMAND_CATALOG;
52049
+ liveCommandCatalog = true;
51903
52050
  #commandOverride;
51904
52051
  #environment;
51905
52052
  #platform;