@codexhost/cli-darwin-x64 0.13.3 → 0.15.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.
@@ -4209,10 +4209,13 @@ function usageSessionTitle(value) {
4209
4209
  return void 0;
4210
4210
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
4211
4211
  return normalized;
4212
- const characters = [...normalized];
4213
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
4214
- return normalized;
4215
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
4212
+ let title = "";
4213
+ for (const character of normalized) {
4214
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
4215
+ break;
4216
+ title += character;
4217
+ }
4218
+ return `${title.trimEnd()}…`;
4216
4219
  }
4217
4220
  function sessionIdOk(value) {
4218
4221
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -7278,10 +7281,10 @@ var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
7278
7281
  const shape = def.shape;
7279
7282
  const propValues = {};
7280
7283
  for (const key in shape) {
7281
- const field = shape[key]._zod;
7282
- if (field.values) {
7284
+ const field2 = shape[key]._zod;
7285
+ if (field2.values) {
7283
7286
  propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
7284
- for (const v of field.values)
7287
+ for (const v of field2.values)
7285
7288
  propValues[key].add(v);
7286
7289
  }
7287
7290
  }
@@ -18900,10 +18903,19 @@ var model = external_exports.string().min(1).max(512);
18900
18903
  var project = external_exports.string().min(1).max(4096);
18901
18904
  var usageStatisticsParamsSchema = external_exports.strictObject({
18902
18905
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
18906
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
18907
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
18908
+ try {
18909
+ new Intl.DateTimeFormat("en", { timeZone: value });
18910
+ return true;
18911
+ } catch {
18912
+ return false;
18913
+ }
18914
+ }, "Unsupported usage statistics timezone").optional(),
18903
18915
  harness: harness.optional(),
18904
18916
  model: model.nullable().optional(),
18905
18917
  project: project.nullable().optional(),
18906
- /** One local date inside the range. */
18918
+ /** One date in the query timezone inside the range. */
18907
18919
  date: localDate.optional()
18908
18920
  });
18909
18921
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -18939,7 +18951,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
18939
18951
  });
18940
18952
  var usageStatisticsResultSchema = external_exports.strictObject({
18941
18953
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
18942
- /** First local date of the range; null for all time. */
18954
+ /** First date in the query timezone (Host local when omitted); null for all time. */
18943
18955
  from: localDate.nullable(),
18944
18956
  to: localDate,
18945
18957
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -18979,7 +18991,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
18979
18991
  totals: usageStatisticsTotalsSchema,
18980
18992
  /** Each date and Harness of the range: every filter except the day. */
18981
18993
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
18982
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
18994
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
18983
18995
  hourly: external_exports.array(external_exports.strictObject({
18984
18996
  weekday: external_exports.number().int().min(0).max(6),
18985
18997
  hour: external_exports.number().int().min(0).max(23),
@@ -19019,6 +19031,51 @@ var hostInteractionIdSchema = opaqueIdSchema.brand();
19019
19031
  var threadPrewarmDiscardParamsSchema = external_exports.object({ threadId: hostThreadIdSchema });
19020
19032
  var threadPrewarmDiscardResultSchema = external_exports.object({ discarded: external_exports.boolean() });
19021
19033
 
19034
+ // ../../shared-contracts/dist/thread-questions.js
19035
+ var field = external_exports.discriminatedUnion("type", [
19036
+ external_exports.object({
19037
+ id: external_exports.string().min(1),
19038
+ type: external_exports.literal("choice"),
19039
+ prompt: external_exports.string(),
19040
+ options: external_exports.array(external_exports.object({
19041
+ value: external_exports.string().min(1),
19042
+ label: external_exports.string(),
19043
+ description: external_exports.string().optional()
19044
+ })).min(1),
19045
+ multiple: external_exports.boolean(),
19046
+ allowOther: external_exports.boolean(),
19047
+ optional: external_exports.boolean()
19048
+ }),
19049
+ external_exports.object({
19050
+ id: external_exports.string().min(1),
19051
+ type: external_exports.literal("text"),
19052
+ prompt: external_exports.string(),
19053
+ multiline: external_exports.boolean(),
19054
+ secret: external_exports.literal(false),
19055
+ optional: external_exports.boolean(),
19056
+ placeholder: external_exports.string().optional(),
19057
+ prefill: external_exports.string().optional()
19058
+ })
19059
+ ]);
19060
+ var threadQuestionSchema = external_exports.object({
19061
+ interactionId: external_exports.string().min(1),
19062
+ turnId: external_exports.string().min(1),
19063
+ title: external_exports.string().optional(),
19064
+ questions: external_exports.array(field).min(1)
19065
+ }).refine(({ questions }) => questions.some((q) => q.type === "choice" && q.multiple), {
19066
+ message: "Shared cards require at least one multi-select question"
19067
+ });
19068
+ var threadQuestionsListParamsSchema = external_exports.strictObject({ threadId: external_exports.string().min(1) });
19069
+ var threadQuestionsResultSchema = external_exports.object({ questions: external_exports.array(threadQuestionSchema) });
19070
+ var threadQuestionRespondParamsSchema = external_exports.strictObject({
19071
+ threadId: external_exports.string().min(1),
19072
+ turnId: external_exports.string().min(1),
19073
+ interactionId: external_exports.string().min(1),
19074
+ answers: external_exports.record(external_exports.string(), external_exports.array(external_exports.string())),
19075
+ cancelled: external_exports.boolean().default(false)
19076
+ });
19077
+ var threadQuestionRespondResultSchema = external_exports.object({ accepted: external_exports.literal(true) });
19078
+
19022
19079
  // ../../shared-contracts/dist/console.js
19023
19080
  var consoleAnnouncementSchema = external_exports.strictObject({
19024
19081
  title: external_exports.string().trim().min(1).max(200),
@@ -19039,6 +19096,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
19039
19096
  "codexhost/harness/display-settings/set",
19040
19097
  "codexhost/harness/inspect",
19041
19098
  "codexhost/harness/installation",
19099
+ "codexhost/harness/installation/start",
19100
+ "codexhost/harness/installation/status",
19042
19101
  "codexhost/harness/launch-settings/get",
19043
19102
  "codexhost/harness/launch-settings/set",
19044
19103
  "codexhost/harness/web-ui/open",
@@ -19114,7 +19173,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
19114
19173
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
19115
19174
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
19116
19175
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
19176
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
19177
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
19178
+ kind: external_exports.literal("countdown"),
19179
+ id: external_exports.string().min(1).max(64),
19180
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
19181
+ label: indicatorTextSchema(256).optional(),
19182
+ tooltip: indicatorTextSchema(1024).optional()
19183
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
19184
+ message: "Composer indicator IDs must be unique"
19185
+ });
19117
19186
  var threadUsageSnapshotSchema = external_exports.object({
19187
+ composerIndicators: composerIndicatorsSchema.optional(),
19118
19188
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
19119
19189
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
19120
19190
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -19522,7 +19592,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
19522
19592
  }).strict().optional(),
19523
19593
  autonomousTurns: external_exports.object({
19524
19594
  observe: external_exports.boolean()
19525
- }).strict().optional()
19595
+ }).strict().optional(),
19596
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
19597
+ steer: external_exports.boolean().optional()
19526
19598
  }).strict();
19527
19599
  var harnessConfigurationStateSchema = external_exports.object({
19528
19600
  effectiveModel: harnessModelRefSchema.optional(),
@@ -19569,7 +19641,9 @@ var harnessInspectionSchema = external_exports.union([
19569
19641
  var harnessInspectParamsSchema = external_exports.object({
19570
19642
  harnessId: harnessIdSchema,
19571
19643
  cwd: nonBlankTextSchema2.max(16384).optional(),
19572
- refresh: external_exports.boolean().optional()
19644
+ refresh: external_exports.boolean().optional(),
19645
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
19646
+ purpose: external_exports.literal("availability").optional()
19573
19647
  }).strict();
19574
19648
  var harnessWebUiOpenParamsSchema = external_exports.object({
19575
19649
  harnessId: harnessIdSchema
@@ -19652,6 +19726,15 @@ var threadOwnershipListResultSchema = external_exports.object({
19652
19726
  seen.add(thread.threadId);
19653
19727
  }
19654
19728
  });
19729
+ var threadSteeringInspectParamsSchema = external_exports.object({
19730
+ threadId: hostThreadIdSchema,
19731
+ /** The text about to be steered; a Harness command always stops and restarts. */
19732
+ text: external_exports.string().optional()
19733
+ }).strict();
19734
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
19735
+ var threadSteeringInspectResultSchema = external_exports.object({
19736
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
19737
+ }).strict();
19655
19738
 
19656
19739
  // ../../shared-contracts/dist/harness-plugins.js
19657
19740
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -19753,6 +19836,10 @@ var harnessInstallationStateSchema = external_exports.object({
19753
19836
  latestVersion: external_exports.string().min(1).max(128),
19754
19837
  updateAvailable: external_exports.boolean(),
19755
19838
  canUpdate: external_exports.boolean(),
19839
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
19840
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
19841
+ /** Official download opened by the user; does not imply an automatic installation. */
19842
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
19756
19843
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
19757
19844
  message: external_exports.string().max(2048).optional(),
19758
19845
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -19760,6 +19847,20 @@ var harnessInstallationStateSchema = external_exports.object({
19760
19847
  notice: harnessLocalizedTextSchema.optional(),
19761
19848
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
19762
19849
  }).strict();
19850
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
19851
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
19852
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
19853
+ external_exports.object({
19854
+ taskId: external_exports.string().uuid(),
19855
+ status: external_exports.literal("succeeded"),
19856
+ result: harnessInstallationStateSchema
19857
+ }).strict(),
19858
+ external_exports.object({
19859
+ taskId: external_exports.string().uuid(),
19860
+ status: external_exports.literal("failed"),
19861
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
19862
+ }).strict()
19863
+ ]);
19763
19864
 
19764
19865
  // ../../shared-contracts/dist/codex-accounts.js
19765
19866
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -20271,6 +20372,18 @@ function sanitizeDiagnosticTail(value) {
20271
20372
  return redacted.length <= DIAGNOSTIC_TAIL_MAX_LENGTH ? redacted : redacted.slice(-DIAGNOSTIC_TAIL_MAX_LENGTH);
20272
20373
  }
20273
20374
 
20375
+ // ../../harness-adapter/dist/steer.js
20376
+ function unsupportedSteer(harnessLabel) {
20377
+ return {
20378
+ ok: false,
20379
+ error: {
20380
+ code: "unsupported",
20381
+ message: `${harnessLabel} cannot steer an active Turn natively`,
20382
+ retryable: false
20383
+ }
20384
+ };
20385
+ }
20386
+
20274
20387
  // ../../harness-adapter/dist/usage.js
20275
20388
  var tokenFields = [
20276
20389
  "inputTokens",
@@ -20298,6 +20411,7 @@ var usageFields = /* @__PURE__ */ new Set([
20298
20411
  ...safeIntegerFields,
20299
20412
  ...percentFields,
20300
20413
  "sessionCacheUsage",
20414
+ "composerIndicators",
20301
20415
  "totalCostUsd",
20302
20416
  "totalCredits",
20303
20417
  "contextUsagePercent",
@@ -20320,26 +20434,27 @@ function parseHostUsage(value) {
20320
20434
  throw new Error(`Harness Usage contains unknown field '${key}'`);
20321
20435
  }
20322
20436
  }
20323
- for (const field of [
20437
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
20438
+ for (const field2 of [
20324
20439
  "totalCredits",
20325
20440
  "contextUsagePercent",
20326
20441
  "apiOutputTokensPerSecond"
20327
20442
  ]) {
20328
- const candidate = value[field];
20443
+ const candidate = value[field2];
20329
20444
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
20330
- throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
20445
+ throw new Error(`Harness Usage '${field2}' must be a finite non-negative number`);
20331
20446
  }
20332
20447
  }
20333
- for (const field of tokenFields) {
20334
- const candidate = value[field];
20448
+ for (const field2 of tokenFields) {
20449
+ const candidate = value[field2];
20335
20450
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
20336
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
20451
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
20337
20452
  }
20338
20453
  }
20339
- for (const field of safeIntegerFields) {
20340
- const candidate = value[field];
20454
+ for (const field2 of safeIntegerFields) {
20455
+ const candidate = value[field2];
20341
20456
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
20342
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
20457
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
20343
20458
  }
20344
20459
  }
20345
20460
  if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
@@ -20348,10 +20463,10 @@ function parseHostUsage(value) {
20348
20463
  if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
20349
20464
  throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
20350
20465
  }
20351
- for (const field of percentFields) {
20352
- const candidate = value[field];
20466
+ for (const field2 of percentFields) {
20467
+ const candidate = value[field2];
20353
20468
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
20354
- throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
20469
+ throw new Error(`Harness Usage '${field2}' must be between 0 and 100`);
20355
20470
  }
20356
20471
  }
20357
20472
  if (value.sessionCacheUsage !== void 0) {
@@ -20390,9 +20505,9 @@ function parseHostUsage(value) {
20390
20505
  if (value.costSource !== "publicPrice") {
20391
20506
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
20392
20507
  }
20393
- return { ...value, unpricedModels: [...models] };
20508
+ return { ...value, ...indicators, unpricedModels: [...models] };
20394
20509
  }
20395
- return { ...value };
20510
+ return { ...value, ...indicators };
20396
20511
  }
20397
20512
  var requestTokenFields = [
20398
20513
  "inputTokens",
@@ -20422,19 +20537,19 @@ function parseHostUsageRequest(value) {
20422
20537
  if (typeof value.requestId !== "string" || value.requestId.length === 0) {
20423
20538
  throw new Error("Harness Usage request 'requestId' must be a non-empty string");
20424
20539
  }
20425
- for (const field of ["model", "provider"]) {
20426
- const candidate = value[field];
20540
+ for (const field2 of ["model", "provider"]) {
20541
+ const candidate = value[field2];
20427
20542
  if (candidate !== void 0 && (typeof candidate !== "string" || candidate.length === 0)) {
20428
- throw new Error(`Harness Usage request '${field}' must be a non-empty string`);
20543
+ throw new Error(`Harness Usage request '${field2}' must be a non-empty string`);
20429
20544
  }
20430
20545
  }
20431
20546
  if (value.historical !== void 0 && typeof value.historical !== "boolean") {
20432
20547
  throw new Error("Harness Usage request 'historical' must be a boolean");
20433
20548
  }
20434
- for (const field of requestTokenFields) {
20435
- const candidate = value[field];
20549
+ for (const field2 of requestTokenFields) {
20550
+ const candidate = value[field2];
20436
20551
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
20437
- throw new Error(`Harness Usage request '${field}' must be a non-negative safe integer`);
20552
+ throw new Error(`Harness Usage request '${field2}' must be a non-negative safe integer`);
20438
20553
  }
20439
20554
  }
20440
20555
  if (value.inputTokens === void 0 || value.outputTokens === void 0) {
@@ -21249,9 +21364,9 @@ var DEEPSEEK_USAGE_COUNTERS = [
21249
21364
  "reasoningOutputTokens"
21250
21365
  ];
21251
21366
  function mergeDeepSeekUsage(current, next) {
21252
- const counters = Object.fromEntries(DEEPSEEK_USAGE_COUNTERS.flatMap((field) => {
21253
- const value = (current?.[field] ?? 0) + (next[field] ?? 0);
21254
- return current?.[field] !== void 0 || next[field] !== void 0 ? [[field, value]] : [];
21367
+ const counters = Object.fromEntries(DEEPSEEK_USAGE_COUNTERS.flatMap((field2) => {
21368
+ const value = (current?.[field2] ?? 0) + (next[field2] ?? 0);
21369
+ return current?.[field2] !== void 0 || next[field2] !== void 0 ? [[field2, value]] : [];
21255
21370
  }));
21256
21371
  const context = next.contextUsedTokens !== void 0 && next.contextWindowTokens !== void 0 ? {
21257
21372
  contextUsedTokens: next.contextUsedTokens,
@@ -21663,7 +21778,7 @@ function onlyKeys(value, required2, optional2 = []) {
21663
21778
  return required2.every((key) => Object.hasOwn(value, key)) && Reflect.ownKeys(value).every((key) => typeof key === "string" && allowed.has(key));
21664
21779
  }
21665
21780
  function requiredFields(value, fields) {
21666
- if (fields.some((field) => !Object.hasOwn(value, field)))
21781
+ if (fields.some((field2) => !Object.hasOwn(value, field2)))
21667
21782
  throw invalid("required fields");
21668
21783
  }
21669
21784
  function assertJsonValue2(value, label) {
@@ -21987,9 +22102,9 @@ function validateTeamPayload(type, data) {
21987
22102
  identifier(value.id, "team payload id");
21988
22103
  if (key === "member") {
21989
22104
  requiredOptionalKeys(value, ["id", "name", "description", "provider", "context", "phase"], ["error"]);
21990
- for (const field of ["name", "description", "provider"])
21991
- if (typeof value[field] !== "string")
21992
- throw invalid(`team member ${field}`);
22105
+ for (const field2 of ["name", "description", "provider"])
22106
+ if (typeof value[field2] !== "string")
22107
+ throw invalid(`team member ${field2}`);
21993
22108
  if (!["fresh", "fork"].includes(value.context) || !["provisioning", "active", "failed"].includes(value.phase) || value.error !== void 0 && typeof value.error !== "string")
21994
22109
  throw invalid("team member");
21995
22110
  } else if (key === "task") {
@@ -22003,8 +22118,8 @@ function validateTeamPayload(type, data) {
22003
22118
  stringArray(value.writeScopes, "team task writeScopes");
22004
22119
  } else {
22005
22120
  exactKeys(value, ["id", "senderId", "senderName", "targetId", "content"]);
22006
- for (const field of ["senderId", "senderName", "targetId"])
22007
- identifier(value[field], `team message ${field}`);
22121
+ for (const field2 of ["senderId", "senderName", "targetId"])
22122
+ identifier(value[field2], `team message ${field2}`);
22008
22123
  validateBlocks(value.content);
22009
22124
  }
22010
22125
  }
@@ -28006,7 +28121,7 @@ function validateToolResultMessage(value, profile) {
28006
28121
  return callId;
28007
28122
  }
28008
28123
  function requiredFields2(value, fields) {
28009
- if (fields.some((field) => !Object.hasOwn(value, field))) {
28124
+ if (fields.some((field2) => !Object.hasOwn(value, field2))) {
28010
28125
  fail("Modern history known event omitted a required field");
28011
28126
  }
28012
28127
  }
@@ -28031,7 +28146,7 @@ function validUsage(value) {
28031
28146
  if (!nonNegativeSafeInteger2(value.inputTokens) || !nonNegativeSafeInteger2(value.outputTokens)) {
28032
28147
  return false;
28033
28148
  }
28034
- return fields.slice(2).every((field) => value[field] === void 0 || nonNegativeSafeInteger2(value[field]));
28149
+ return fields.slice(2).every((field2) => value[field2] === void 0 || nonNegativeSafeInteger2(value[field2]));
28035
28150
  }
28036
28151
  function validateTurnReason(value) {
28037
28152
  if (!isRecord4(value) || typeof value.kind !== "string") {
@@ -28774,6 +28889,8 @@ var ModernHarnessSession = class {
28774
28889
  switch (command.type) {
28775
28890
  case "turn.start":
28776
28891
  return this.#start(command);
28892
+ case "turn.steer":
28893
+ return Promise.resolve(unsupportedSteer("DeepSeek Harness"));
28777
28894
  case "turn.cancel":
28778
28895
  return this.#cancel(command);
28779
28896
  case "interaction.respond":
@@ -17,6 +17,7 @@
17
17
  "qoder-cn",
18
18
  "kimi-code",
19
19
  "zcode",
20
+ "copilot",
20
21
  "codex-usage"
21
22
  ]
22
23
  }