@karlorz/codexhost-cli-win32-x64 0.13.3-6 → 0.14.0-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.
Files changed (34) hide show
  1. package/README.md +1 -1
  2. package/app/codexhost-distribution.json +1 -1
  3. package/app/console-server.mjs +539 -95
  4. package/app/console-web.js +879 -73
  5. package/app/cpa-live-voice-hook.js +605 -37
  6. package/app/desktop-controller.mjs +94 -9
  7. package/app/host-runtime.mjs +1662 -642
  8. package/app/plugins/antigravity/plugin.mjs +113 -13
  9. package/app/plugins/claude-code/plugin.mjs +429 -26
  10. package/app/plugins/codebuddy/plugin.mjs +139 -22
  11. package/app/plugins/codex-usage/plugin.mjs +198 -74
  12. package/app/plugins/copilot/assets/icon.png +0 -0
  13. package/app/plugins/copilot/manifest.json +26 -0
  14. package/app/plugins/copilot/plugin.mjs +34645 -0
  15. package/app/plugins/cursor-cli/plugin.mjs +20877 -44973
  16. package/app/plugins/deepseek-harness/plugin.mjs +105 -11
  17. package/app/plugins/enabled.json +1 -0
  18. package/app/plugins/grok/plugin.mjs +1073 -214
  19. package/app/plugins/hermes/plugin.mjs +102 -9
  20. package/app/plugins/kimi-code/plugin.mjs +98 -7
  21. package/app/plugins/kiro-cli/plugin.mjs +98 -7
  22. package/app/plugins/omp/plugin.mjs +2177 -2000
  23. package/app/plugins/opencode/plugin.mjs +107 -11
  24. package/app/plugins/pi/plugin.mjs +2554 -2285
  25. package/app/plugins/qoder/plugin.mjs +105 -11
  26. package/app/plugins/qoder-cn/plugin.mjs +105 -11
  27. package/app/plugins/workbuddy/plugin.mjs +400 -46
  28. package/app/plugins/zcode/plugin.mjs +106 -11
  29. package/app/renderer-extension.js +2717 -1237
  30. package/bin/codexhost.exe +0 -0
  31. package/libexec/codexhost-node-repl.exe +0 -0
  32. package/libexec/codexhost-shim.exe +0 -0
  33. package/libexec/codexhost-updater.exe +0 -0
  34. package/package.json +1 -1
@@ -27648,10 +27648,19 @@ var model = external_exports.string().min(1).max(512);
27648
27648
  var project = external_exports.string().min(1).max(4096);
27649
27649
  var usageStatisticsParamsSchema = external_exports.strictObject({
27650
27650
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27651
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
27652
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
27653
+ try {
27654
+ new Intl.DateTimeFormat("en", { timeZone: value });
27655
+ return true;
27656
+ } catch {
27657
+ return false;
27658
+ }
27659
+ }, "Unsupported usage statistics timezone").optional(),
27651
27660
  harness: harness.optional(),
27652
27661
  model: model.nullable().optional(),
27653
27662
  project: project.nullable().optional(),
27654
- /** One local date inside the range. */
27663
+ /** One date in the query timezone inside the range. */
27655
27664
  date: localDate.optional()
27656
27665
  });
27657
27666
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27687,7 +27696,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27687
27696
  });
27688
27697
  var usageStatisticsResultSchema = external_exports.strictObject({
27689
27698
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27690
- /** First local date of the range; null for all time. */
27699
+ /** First date in the query timezone (Host local when omitted); null for all time. */
27691
27700
  from: localDate.nullable(),
27692
27701
  to: localDate,
27693
27702
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27727,7 +27736,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27727
27736
  totals: usageStatisticsTotalsSchema,
27728
27737
  /** Each date and Harness of the range: every filter except the day. */
27729
27738
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27730
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27739
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27731
27740
  hourly: external_exports.array(external_exports.strictObject({
27732
27741
  weekday: external_exports.number().int().min(0).max(6),
27733
27742
  hour: external_exports.number().int().min(0).max(23),
@@ -27818,8 +27827,12 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27818
27827
  "codexhost/harness/display-settings/set",
27819
27828
  "codexhost/harness/inspect",
27820
27829
  "codexhost/harness/installation",
27830
+ "codexhost/harness/installation/start",
27831
+ "codexhost/harness/installation/status",
27821
27832
  "codexhost/harness/launch-settings/get",
27822
27833
  "codexhost/harness/launch-settings/set",
27834
+ "codexhost/harness/grok-computer-use/get",
27835
+ "codexhost/harness/grok-computer-use/set",
27823
27836
  "codexhost/harness/web-ui/open",
27824
27837
  "codexhost/harness/accounts/sources",
27825
27838
  "codexhost/harness/accounts/list",
@@ -27893,7 +27906,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27893
27906
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27894
27907
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27895
27908
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27909
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27910
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27911
+ kind: external_exports.literal("countdown"),
27912
+ id: external_exports.string().min(1).max(64),
27913
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27914
+ label: indicatorTextSchema(256).optional(),
27915
+ tooltip: indicatorTextSchema(1024).optional()
27916
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27917
+ message: "Composer indicator IDs must be unique"
27918
+ });
27896
27919
  var threadUsageSnapshotSchema = external_exports.object({
27920
+ composerIndicators: composerIndicatorsSchema.optional(),
27897
27921
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27898
27922
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27899
27923
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -28301,7 +28325,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
28301
28325
  }).strict().optional(),
28302
28326
  autonomousTurns: external_exports.object({
28303
28327
  observe: external_exports.boolean()
28304
- }).strict().optional()
28328
+ }).strict().optional(),
28329
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
28330
+ steer: external_exports.boolean().optional()
28305
28331
  }).strict();
28306
28332
  var harnessConfigurationStateSchema = external_exports.object({
28307
28333
  effectiveModel: harnessModelRefSchema.optional(),
@@ -28348,7 +28374,9 @@ var harnessInspectionSchema = external_exports.union([
28348
28374
  var harnessInspectParamsSchema = external_exports.object({
28349
28375
  harnessId: harnessIdSchema,
28350
28376
  cwd: nonBlankTextSchema2.max(16384).optional(),
28351
- refresh: external_exports.boolean().optional()
28377
+ refresh: external_exports.boolean().optional(),
28378
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
28379
+ purpose: external_exports.literal("availability").optional()
28352
28380
  }).strict();
28353
28381
  var harnessWebUiOpenParamsSchema = external_exports.object({
28354
28382
  harnessId: harnessIdSchema
@@ -28431,6 +28459,15 @@ var threadOwnershipListResultSchema = external_exports.object({
28431
28459
  seen.add(thread.threadId);
28432
28460
  }
28433
28461
  });
28462
+ var threadSteeringInspectParamsSchema = external_exports.object({
28463
+ threadId: hostThreadIdSchema,
28464
+ /** The text about to be steered; a Harness command always stops and restarts. */
28465
+ text: external_exports.string().optional()
28466
+ }).strict();
28467
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28468
+ var threadSteeringInspectResultSchema = external_exports.object({
28469
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28470
+ }).strict();
28434
28471
 
28435
28472
  // ../../shared-contracts/dist/harness-plugins.js
28436
28473
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28522,6 +28559,26 @@ var harnessLaunchSettingsSchema = external_exports.object({
28522
28559
  restartRequired: external_exports.boolean()
28523
28560
  }).strict();
28524
28561
 
28562
+ // ../../shared-contracts/dist/grok-computer-use.js
28563
+ var grokComputerUseGetSchema = external_exports.object({}).strict();
28564
+ var grokComputerUseSetSchema = external_exports.object({
28565
+ enabled: external_exports.boolean().optional(),
28566
+ browser: external_exports.boolean().optional()
28567
+ }).strict().refine((value) => value.enabled !== void 0 || value.browser !== void 0, {
28568
+ message: "Expected enabled or browser"
28569
+ });
28570
+ var grokComputerUseSettingsSchema = external_exports.object({
28571
+ enabled: external_exports.boolean(),
28572
+ available: external_exports.boolean(),
28573
+ unavailableReason: external_exports.string().min(1).max(500).optional(),
28574
+ browser: external_exports.boolean().optional(),
28575
+ browserFilesPresent: external_exports.boolean().optional(),
28576
+ browserAvailable: external_exports.boolean().optional(),
28577
+ browserUnavailableReason: external_exports.string().min(1).max(500).optional(),
28578
+ applyFailed: external_exports.boolean().optional(),
28579
+ applyError: external_exports.string().min(1).max(500).optional()
28580
+ }).strict();
28581
+
28525
28582
  // ../../shared-contracts/dist/harness-installation.js
28526
28583
  var harnessInstallationParamsSchema = external_exports.object({
28527
28584
  harnessId: harnessIdSchema,
@@ -28532,6 +28589,10 @@ var harnessInstallationStateSchema = external_exports.object({
28532
28589
  latestVersion: external_exports.string().min(1).max(128),
28533
28590
  updateAvailable: external_exports.boolean(),
28534
28591
  canUpdate: external_exports.boolean(),
28592
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28593
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28594
+ /** Official download opened by the user; does not imply an automatic installation. */
28595
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28535
28596
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28536
28597
  message: external_exports.string().max(2048).optional(),
28537
28598
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -28539,6 +28600,20 @@ var harnessInstallationStateSchema = external_exports.object({
28539
28600
  notice: harnessLocalizedTextSchema.optional(),
28540
28601
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28541
28602
  }).strict();
28603
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28604
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28605
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28606
+ external_exports.object({
28607
+ taskId: external_exports.string().uuid(),
28608
+ status: external_exports.literal("succeeded"),
28609
+ result: harnessInstallationStateSchema
28610
+ }).strict(),
28611
+ external_exports.object({
28612
+ taskId: external_exports.string().uuid(),
28613
+ status: external_exports.literal("failed"),
28614
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28615
+ }).strict()
28616
+ ]);
28542
28617
 
28543
28618
  // ../../shared-contracts/dist/codex-accounts.js
28544
28619
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -29338,6 +29413,18 @@ var HarnessOutputChannel = class {
29338
29413
  }
29339
29414
  };
29340
29415
 
29416
+ // ../../harness-adapter/dist/steer.js
29417
+ function unsupportedSteer(harnessLabel) {
29418
+ return {
29419
+ ok: false,
29420
+ error: {
29421
+ code: "unsupported",
29422
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29423
+ retryable: false
29424
+ }
29425
+ };
29426
+ }
29427
+
29341
29428
  // ../../harness-adapter/dist/usage.js
29342
29429
  var tokenFields = [
29343
29430
  "inputTokens",
@@ -29365,6 +29452,7 @@ var usageFields = /* @__PURE__ */ new Set([
29365
29452
  ...safeIntegerFields,
29366
29453
  ...percentFields,
29367
29454
  "sessionCacheUsage",
29455
+ "composerIndicators",
29368
29456
  "totalCostUsd",
29369
29457
  "totalCredits",
29370
29458
  "contextUsagePercent",
@@ -29387,6 +29475,7 @@ function parseHostUsage(value) {
29387
29475
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29388
29476
  }
29389
29477
  }
29478
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29390
29479
  for (const field of [
29391
29480
  "totalCredits",
29392
29481
  "contextUsagePercent",
@@ -29457,9 +29546,9 @@ function parseHostUsage(value) {
29457
29546
  if (value.costSource !== "publicPrice") {
29458
29547
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29459
29548
  }
29460
- return { ...value, unpricedModels: [...models] };
29549
+ return { ...value, ...indicators, unpricedModels: [...models] };
29461
29550
  }
29462
- return { ...value };
29551
+ return { ...value, ...indicators };
29463
29552
  }
29464
29553
  var requestTokenFields = [
29465
29554
  "inputTokens",
@@ -52347,6 +52436,8 @@ var QoderSession = class {
52347
52436
  };
52348
52437
  }
52349
52438
  switch (command.type) {
52439
+ case "turn.steer":
52440
+ return unsupportedSteer("Qoder");
52350
52441
  case "turn.start": {
52351
52442
  if (this.#activeTurn) {
52352
52443
  return {
@@ -53057,10 +53148,13 @@ function usageSessionTitle(value) {
53057
53148
  return void 0;
53058
53149
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
53059
53150
  return normalized;
53060
- const characters = [...normalized];
53061
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
53062
- return normalized;
53063
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53151
+ let title = "";
53152
+ for (const character of normalized) {
53153
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53154
+ break;
53155
+ title += character;
53156
+ }
53157
+ return `${title.trimEnd()}…`;
53064
53158
  }
53065
53159
  function sessionIdOk(value) {
53066
53160
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -27245,10 +27245,19 @@ var model = external_exports.string().min(1).max(512);
27245
27245
  var project = external_exports.string().min(1).max(4096);
27246
27246
  var usageStatisticsParamsSchema = external_exports.strictObject({
27247
27247
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27248
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
27249
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
27250
+ try {
27251
+ new Intl.DateTimeFormat("en", { timeZone: value });
27252
+ return true;
27253
+ } catch {
27254
+ return false;
27255
+ }
27256
+ }, "Unsupported usage statistics timezone").optional(),
27248
27257
  harness: harness.optional(),
27249
27258
  model: model.nullable().optional(),
27250
27259
  project: project.nullable().optional(),
27251
- /** One local date inside the range. */
27260
+ /** One date in the query timezone inside the range. */
27252
27261
  date: localDate.optional()
27253
27262
  });
27254
27263
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27284,7 +27293,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27284
27293
  });
27285
27294
  var usageStatisticsResultSchema = external_exports.strictObject({
27286
27295
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27287
- /** First local date of the range; null for all time. */
27296
+ /** First date in the query timezone (Host local when omitted); null for all time. */
27288
27297
  from: localDate.nullable(),
27289
27298
  to: localDate,
27290
27299
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27324,7 +27333,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27324
27333
  totals: usageStatisticsTotalsSchema,
27325
27334
  /** Each date and Harness of the range: every filter except the day. */
27326
27335
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27327
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27336
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27328
27337
  hourly: external_exports.array(external_exports.strictObject({
27329
27338
  weekday: external_exports.number().int().min(0).max(6),
27330
27339
  hour: external_exports.number().int().min(0).max(23),
@@ -27415,8 +27424,12 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27415
27424
  "codexhost/harness/display-settings/set",
27416
27425
  "codexhost/harness/inspect",
27417
27426
  "codexhost/harness/installation",
27427
+ "codexhost/harness/installation/start",
27428
+ "codexhost/harness/installation/status",
27418
27429
  "codexhost/harness/launch-settings/get",
27419
27430
  "codexhost/harness/launch-settings/set",
27431
+ "codexhost/harness/grok-computer-use/get",
27432
+ "codexhost/harness/grok-computer-use/set",
27420
27433
  "codexhost/harness/web-ui/open",
27421
27434
  "codexhost/harness/accounts/sources",
27422
27435
  "codexhost/harness/accounts/list",
@@ -27490,7 +27503,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27490
27503
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27491
27504
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27492
27505
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27506
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27507
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27508
+ kind: external_exports.literal("countdown"),
27509
+ id: external_exports.string().min(1).max(64),
27510
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27511
+ label: indicatorTextSchema(256).optional(),
27512
+ tooltip: indicatorTextSchema(1024).optional()
27513
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27514
+ message: "Composer indicator IDs must be unique"
27515
+ });
27493
27516
  var threadUsageSnapshotSchema = external_exports.object({
27517
+ composerIndicators: composerIndicatorsSchema.optional(),
27494
27518
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27495
27519
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27496
27520
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -27898,7 +27922,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
27898
27922
  }).strict().optional(),
27899
27923
  autonomousTurns: external_exports.object({
27900
27924
  observe: external_exports.boolean()
27901
- }).strict().optional()
27925
+ }).strict().optional(),
27926
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
27927
+ steer: external_exports.boolean().optional()
27902
27928
  }).strict();
27903
27929
  var harnessConfigurationStateSchema = external_exports.object({
27904
27930
  effectiveModel: harnessModelRefSchema.optional(),
@@ -27945,7 +27971,9 @@ var harnessInspectionSchema = external_exports.union([
27945
27971
  var harnessInspectParamsSchema = external_exports.object({
27946
27972
  harnessId: harnessIdSchema,
27947
27973
  cwd: nonBlankTextSchema2.max(16384).optional(),
27948
- refresh: external_exports.boolean().optional()
27974
+ refresh: external_exports.boolean().optional(),
27975
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
27976
+ purpose: external_exports.literal("availability").optional()
27949
27977
  }).strict();
27950
27978
  var harnessWebUiOpenParamsSchema = external_exports.object({
27951
27979
  harnessId: harnessIdSchema
@@ -28028,6 +28056,15 @@ var threadOwnershipListResultSchema = external_exports.object({
28028
28056
  seen.add(thread.threadId);
28029
28057
  }
28030
28058
  });
28059
+ var threadSteeringInspectParamsSchema = external_exports.object({
28060
+ threadId: hostThreadIdSchema,
28061
+ /** The text about to be steered; a Harness command always stops and restarts. */
28062
+ text: external_exports.string().optional()
28063
+ }).strict();
28064
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28065
+ var threadSteeringInspectResultSchema = external_exports.object({
28066
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28067
+ }).strict();
28031
28068
 
28032
28069
  // ../../shared-contracts/dist/harness-plugins.js
28033
28070
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28119,6 +28156,26 @@ var harnessLaunchSettingsSchema = external_exports.object({
28119
28156
  restartRequired: external_exports.boolean()
28120
28157
  }).strict();
28121
28158
 
28159
+ // ../../shared-contracts/dist/grok-computer-use.js
28160
+ var grokComputerUseGetSchema = external_exports.object({}).strict();
28161
+ var grokComputerUseSetSchema = external_exports.object({
28162
+ enabled: external_exports.boolean().optional(),
28163
+ browser: external_exports.boolean().optional()
28164
+ }).strict().refine((value) => value.enabled !== void 0 || value.browser !== void 0, {
28165
+ message: "Expected enabled or browser"
28166
+ });
28167
+ var grokComputerUseSettingsSchema = external_exports.object({
28168
+ enabled: external_exports.boolean(),
28169
+ available: external_exports.boolean(),
28170
+ unavailableReason: external_exports.string().min(1).max(500).optional(),
28171
+ browser: external_exports.boolean().optional(),
28172
+ browserFilesPresent: external_exports.boolean().optional(),
28173
+ browserAvailable: external_exports.boolean().optional(),
28174
+ browserUnavailableReason: external_exports.string().min(1).max(500).optional(),
28175
+ applyFailed: external_exports.boolean().optional(),
28176
+ applyError: external_exports.string().min(1).max(500).optional()
28177
+ }).strict();
28178
+
28122
28179
  // ../../shared-contracts/dist/harness-installation.js
28123
28180
  var harnessInstallationParamsSchema = external_exports.object({
28124
28181
  harnessId: harnessIdSchema,
@@ -28129,6 +28186,10 @@ var harnessInstallationStateSchema = external_exports.object({
28129
28186
  latestVersion: external_exports.string().min(1).max(128),
28130
28187
  updateAvailable: external_exports.boolean(),
28131
28188
  canUpdate: external_exports.boolean(),
28189
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28190
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28191
+ /** Official download opened by the user; does not imply an automatic installation. */
28192
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28132
28193
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28133
28194
  message: external_exports.string().max(2048).optional(),
28134
28195
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -28136,6 +28197,20 @@ var harnessInstallationStateSchema = external_exports.object({
28136
28197
  notice: harnessLocalizedTextSchema.optional(),
28137
28198
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28138
28199
  }).strict();
28200
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28201
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28202
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28203
+ external_exports.object({
28204
+ taskId: external_exports.string().uuid(),
28205
+ status: external_exports.literal("succeeded"),
28206
+ result: harnessInstallationStateSchema
28207
+ }).strict(),
28208
+ external_exports.object({
28209
+ taskId: external_exports.string().uuid(),
28210
+ status: external_exports.literal("failed"),
28211
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28212
+ }).strict()
28213
+ ]);
28139
28214
 
28140
28215
  // ../../shared-contracts/dist/codex-accounts.js
28141
28216
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -29340,6 +29415,18 @@ var HarnessOutputChannel = class {
29340
29415
  }
29341
29416
  };
29342
29417
 
29418
+ // ../../harness-adapter/dist/steer.js
29419
+ function unsupportedSteer(harnessLabel) {
29420
+ return {
29421
+ ok: false,
29422
+ error: {
29423
+ code: "unsupported",
29424
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29425
+ retryable: false
29426
+ }
29427
+ };
29428
+ }
29429
+
29343
29430
  // ../../harness-adapter/dist/usage.js
29344
29431
  var tokenFields = [
29345
29432
  "inputTokens",
@@ -29367,6 +29454,7 @@ var usageFields = /* @__PURE__ */ new Set([
29367
29454
  ...safeIntegerFields,
29368
29455
  ...percentFields,
29369
29456
  "sessionCacheUsage",
29457
+ "composerIndicators",
29370
29458
  "totalCostUsd",
29371
29459
  "totalCredits",
29372
29460
  "contextUsagePercent",
@@ -29389,6 +29477,7 @@ function parseHostUsage(value) {
29389
29477
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29390
29478
  }
29391
29479
  }
29480
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29392
29481
  for (const field of [
29393
29482
  "totalCredits",
29394
29483
  "contextUsagePercent",
@@ -29459,9 +29548,9 @@ function parseHostUsage(value) {
29459
29548
  if (value.costSource !== "publicPrice") {
29460
29549
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29461
29550
  }
29462
- return { ...value, unpricedModels: [...models] };
29551
+ return { ...value, ...indicators, unpricedModels: [...models] };
29463
29552
  }
29464
- return { ...value };
29553
+ return { ...value, ...indicators };
29465
29554
  }
29466
29555
  var requestTokenFields = [
29467
29556
  "inputTokens",
@@ -52349,6 +52438,8 @@ var QoderSession = class {
52349
52438
  };
52350
52439
  }
52351
52440
  switch (command.type) {
52441
+ case "turn.steer":
52442
+ return unsupportedSteer("Qoder");
52352
52443
  case "turn.start": {
52353
52444
  if (this.#activeTurn) {
52354
52445
  return {
@@ -53059,10 +53150,13 @@ function usageSessionTitle(value) {
53059
53150
  return void 0;
53060
53151
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
53061
53152
  return normalized;
53062
- const characters = [...normalized];
53063
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
53064
- return normalized;
53065
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53153
+ let title = "";
53154
+ for (const character of normalized) {
53155
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53156
+ break;
53157
+ title += character;
53158
+ }
53159
+ return `${title.trimEnd()}…`;
53066
53160
  }
53067
53161
  function sessionIdOk(value) {
53068
53162
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;