@codexhost/cli-darwin-x64 0.13.2 → 0.14.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 (33) hide show
  1. package/README.md +1 -1
  2. package/app/codexhost-distribution.json +1 -1
  3. package/app/console-server.mjs +94 -8
  4. package/app/console-web.js +537 -146
  5. package/app/desktop-controller.mjs +108 -12
  6. package/app/host-runtime.mjs +847 -235
  7. package/app/plugins/antigravity/plugin.mjs +143 -20
  8. package/app/plugins/claude-code/plugin.mjs +601 -71
  9. package/app/plugins/codebuddy/plugin.mjs +227 -30
  10. package/app/plugins/codex-usage/plugin.mjs +212 -77
  11. package/app/plugins/copilot/assets/icon.png +0 -0
  12. package/app/plugins/copilot/manifest.json +26 -0
  13. package/app/plugins/copilot/plugin.mjs +34546 -0
  14. package/app/plugins/cursor-cli/plugin.mjs +20805 -44862
  15. package/app/plugins/deepseek-harness/manifest.json +2 -2
  16. package/app/plugins/deepseek-harness/plugin.mjs +202 -21
  17. package/app/plugins/enabled.json +1 -0
  18. package/app/plugins/grok/plugin.mjs +278 -29
  19. package/app/plugins/hermes/plugin.mjs +143 -12
  20. package/app/plugins/kimi-code/plugin.mjs +140 -16
  21. package/app/plugins/kiro-cli/plugin.mjs +121 -10
  22. package/app/plugins/omp/plugin.mjs +2200 -2002
  23. package/app/plugins/opencode/plugin.mjs +137 -16
  24. package/app/plugins/pi/plugin.mjs +2563 -2282
  25. package/app/plugins/qoder/plugin.mjs +133 -14
  26. package/app/plugins/qoder-cn/plugin.mjs +133 -14
  27. package/app/plugins/workbuddy/plugin.mjs +603 -56
  28. package/app/plugins/zcode/plugin.mjs +133 -14
  29. package/app/renderer-extension.js +1171 -529
  30. package/bin/codexhost +0 -0
  31. package/libexec/codexhost-shim +0 -0
  32. package/libexec/codexhost-updater +0 -0
  33. package/package.json +1 -1
@@ -15085,6 +15085,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
15085
15085
  initializeOnly: external_exports.boolean().optional()
15086
15086
  });
15087
15087
 
15088
+ // ../../shared-contracts/dist/harness-presentation.js
15089
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
15090
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text) => text.trim().length > 0);
15091
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
15092
+ label: displayText(256).optional(),
15093
+ description: displayText(1024).optional()
15094
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
15095
+ var harnessLocalizedTextSchema = external_exports.record(localeSchema, displayText(4096)).refine((entries) => typeof entries.en === "string", "English fallback is required").refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
15096
+
15088
15097
  // ../../shared-contracts/dist/model-price-overrides.js
15089
15098
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
15090
15099
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -15134,10 +15143,19 @@ var model = external_exports.string().min(1).max(512);
15134
15143
  var project = external_exports.string().min(1).max(4096);
15135
15144
  var usageStatisticsParamsSchema = external_exports.strictObject({
15136
15145
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15146
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
15147
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
15148
+ try {
15149
+ new Intl.DateTimeFormat("en", { timeZone: value });
15150
+ return true;
15151
+ } catch {
15152
+ return false;
15153
+ }
15154
+ }, "Unsupported usage statistics timezone").optional(),
15137
15155
  harness: harness.optional(),
15138
15156
  model: model.nullable().optional(),
15139
15157
  project: project.nullable().optional(),
15140
- /** One local date inside the range. */
15158
+ /** One date in the query timezone inside the range. */
15141
15159
  date: localDate.optional()
15142
15160
  });
15143
15161
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -15173,7 +15191,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
15173
15191
  });
15174
15192
  var usageStatisticsResultSchema = external_exports.strictObject({
15175
15193
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15176
- /** First local date of the range; null for all time. */
15194
+ /** First date in the query timezone (Host local when omitted); null for all time. */
15177
15195
  from: localDate.nullable(),
15178
15196
  to: localDate,
15179
15197
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -15213,7 +15231,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
15213
15231
  totals: usageStatisticsTotalsSchema,
15214
15232
  /** Each date and Harness of the range: every filter except the day. */
15215
15233
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
15216
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
15234
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
15217
15235
  hourly: external_exports.array(external_exports.strictObject({
15218
15236
  weekday: external_exports.number().int().min(0).max(6),
15219
15237
  hour: external_exports.number().int().min(0).max(23),
@@ -15273,6 +15291,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
15273
15291
  "codexhost/harness/display-settings/set",
15274
15292
  "codexhost/harness/inspect",
15275
15293
  "codexhost/harness/installation",
15294
+ "codexhost/harness/installation/start",
15295
+ "codexhost/harness/installation/status",
15276
15296
  "codexhost/harness/launch-settings/get",
15277
15297
  "codexhost/harness/launch-settings/set",
15278
15298
  "codexhost/harness/web-ui/open",
@@ -15348,7 +15368,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
15348
15368
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
15349
15369
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
15350
15370
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
15371
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
15372
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
15373
+ kind: external_exports.literal("countdown"),
15374
+ id: external_exports.string().min(1).max(64),
15375
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
15376
+ label: indicatorTextSchema(256).optional(),
15377
+ tooltip: indicatorTextSchema(1024).optional()
15378
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
15379
+ message: "Composer indicator IDs must be unique"
15380
+ });
15351
15381
  var threadUsageSnapshotSchema = external_exports.object({
15382
+ composerIndicators: composerIndicatorsSchema.optional(),
15352
15383
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
15353
15384
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
15354
15385
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -15421,8 +15452,24 @@ var threadUsageSnapshotSchema = external_exports.object({
15421
15452
  }
15422
15453
  });
15423
15454
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
15455
+ var accountCreditsPeriodSchema = external_exports.enum([
15456
+ "weekly",
15457
+ "monthly",
15458
+ "five_hour",
15459
+ "seven_day",
15460
+ "unknown"
15461
+ ]);
15462
+ var accountCreditsScopeSchema = external_exports.object({
15463
+ id: external_exports.string().min(1).max(256),
15464
+ label: external_exports.string().min(1).max(256),
15465
+ localizations: harnessLocalizationsSchema.optional()
15466
+ }).strict();
15424
15467
  var accountCreditsProductUsageSchema = external_exports.object({
15425
15468
  product: external_exports.string().min(1),
15469
+ /** Native period and scope, never inferred from the display name. */
15470
+ periodType: accountCreditsPeriodSchema.optional(),
15471
+ scope: accountCreditsScopeSchema.optional(),
15472
+ localizations: harnessLocalizationsSchema.optional(),
15426
15473
  used: external_exports.number().finite().nonnegative().optional(),
15427
15474
  // Zero is a real empty cap, not an absent field.
15428
15475
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -15442,9 +15489,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
15442
15489
  unit: external_exports.string().min(1).max(32).optional(),
15443
15490
  /** Native label when the primary limit is scoped to a model or product group. */
15444
15491
  label: external_exports.string().min(1).optional(),
15492
+ scope: accountCreditsScopeSchema.optional(),
15493
+ localizations: harnessLocalizationsSchema.optional(),
15445
15494
  usedPercent: usagePercentSchema,
15446
15495
  resetsAt: external_exports.string().min(1).optional(),
15447
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
15496
+ periodType: accountCreditsPeriodSchema,
15448
15497
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
15449
15498
  resetCredits: accountResetCreditsSchema.optional()
15450
15499
  }).strict();
@@ -15455,7 +15504,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
15455
15504
  var threadUsageInspectionSchema = external_exports.object({
15456
15505
  threadId: hostThreadIdSchema,
15457
15506
  usage: threadUsageSnapshotSchema.nullable(),
15458
- accountCredits: accountCreditsSnapshotSchema.optional()
15507
+ accountCredits: accountCreditsSnapshotSchema.optional(),
15508
+ /** Whether this source can provide cached account quota independently of usage. */
15509
+ accountCreditsSupported: external_exports.boolean().optional()
15459
15510
  }).strict();
15460
15511
 
15461
15512
  // ../../shared-contracts/dist/harness-accounts.js
@@ -15582,7 +15633,8 @@ var harnessPermissionModeSchema = external_exports.object({
15582
15633
  id: harnessPermissionModeIdSchema,
15583
15634
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
15584
15635
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
15585
- dangerous: external_exports.boolean().optional()
15636
+ dangerous: external_exports.boolean().optional(),
15637
+ localizations: harnessLocalizationsSchema.optional()
15586
15638
  }).strict();
15587
15639
  var harnessPermissionModeCatalogSchema = external_exports.object({
15588
15640
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -15735,7 +15787,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
15735
15787
  }).strict().optional(),
15736
15788
  autonomousTurns: external_exports.object({
15737
15789
  observe: external_exports.boolean()
15738
- }).strict().optional()
15790
+ }).strict().optional(),
15791
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
15792
+ steer: external_exports.boolean().optional()
15739
15793
  }).strict();
15740
15794
  var harnessConfigurationStateSchema = external_exports.object({
15741
15795
  effectiveModel: harnessModelRefSchema.optional(),
@@ -15782,7 +15836,9 @@ var harnessInspectionSchema = external_exports.union([
15782
15836
  var harnessInspectParamsSchema = external_exports.object({
15783
15837
  harnessId: harnessIdSchema,
15784
15838
  cwd: nonBlankTextSchema2.max(16384).optional(),
15785
- refresh: external_exports.boolean().optional()
15839
+ refresh: external_exports.boolean().optional(),
15840
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
15841
+ purpose: external_exports.literal("availability").optional()
15786
15842
  }).strict();
15787
15843
  var harnessWebUiOpenParamsSchema = external_exports.object({
15788
15844
  harnessId: harnessIdSchema
@@ -15865,6 +15921,15 @@ var threadOwnershipListResultSchema = external_exports.object({
15865
15921
  seen.add(thread.threadId);
15866
15922
  }
15867
15923
  });
15924
+ var threadSteeringInspectParamsSchema = external_exports.object({
15925
+ threadId: hostThreadIdSchema,
15926
+ /** The text about to be steered; a Harness command always stops and restarts. */
15927
+ text: external_exports.string().optional()
15928
+ }).strict();
15929
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
15930
+ var threadSteeringInspectResultSchema = external_exports.object({
15931
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
15932
+ }).strict();
15868
15933
 
15869
15934
  // ../../shared-contracts/dist/harness-plugins.js
15870
15935
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -15966,11 +16031,31 @@ var harnessInstallationStateSchema = external_exports.object({
15966
16031
  latestVersion: external_exports.string().min(1).max(128),
15967
16032
  updateAvailable: external_exports.boolean(),
15968
16033
  canUpdate: external_exports.boolean(),
16034
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
16035
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
16036
+ /** Official download opened by the user; does not imply an automatic installation. */
16037
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
15969
16038
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
15970
16039
  message: external_exports.string().max(2048).optional(),
15971
16040
  messageCode: external_exports.string().min(1).max(128).optional(),
16041
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
16042
+ notice: harnessLocalizedTextSchema.optional(),
15972
16043
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
15973
16044
  }).strict();
16045
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
16046
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
16047
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
16048
+ external_exports.object({
16049
+ taskId: external_exports.string().uuid(),
16050
+ status: external_exports.literal("succeeded"),
16051
+ result: harnessInstallationStateSchema
16052
+ }).strict(),
16053
+ external_exports.object({
16054
+ taskId: external_exports.string().uuid(),
16055
+ status: external_exports.literal("failed"),
16056
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
16057
+ }).strict()
16058
+ ]);
15974
16059
 
15975
16060
  // ../../shared-contracts/dist/codex-accounts.js
15976
16061
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -16095,6 +16180,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
16095
16180
  invocation: commandInvocationSchema,
16096
16181
  label: commandLabelSchema,
16097
16182
  description: commandDescriptionSchema.optional(),
16183
+ localizations: harnessLocalizationsSchema.optional(),
16098
16184
  argumentMode: external_exports.enum(["none", "text"]),
16099
16185
  /**
16100
16186
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -16459,6 +16545,18 @@ function sanitizeDiagnosticTail(value) {
16459
16545
  return redacted.length <= DIAGNOSTIC_TAIL_MAX_LENGTH ? redacted : redacted.slice(-DIAGNOSTIC_TAIL_MAX_LENGTH);
16460
16546
  }
16461
16547
 
16548
+ // ../../harness-adapter/dist/steer.js
16549
+ function unsupportedSteer(harnessLabel) {
16550
+ return {
16551
+ ok: false,
16552
+ error: {
16553
+ code: "unsupported",
16554
+ message: `${harnessLabel} cannot steer an active Turn natively`,
16555
+ retryable: false
16556
+ }
16557
+ };
16558
+ }
16559
+
16462
16560
  // ../../harness-adapter/dist/usage.js
16463
16561
  var tokenFields = [
16464
16562
  "inputTokens",
@@ -16486,6 +16584,7 @@ var usageFields = /* @__PURE__ */ new Set([
16486
16584
  ...safeIntegerFields,
16487
16585
  ...percentFields,
16488
16586
  "sessionCacheUsage",
16587
+ "composerIndicators",
16489
16588
  "totalCostUsd",
16490
16589
  "totalCredits",
16491
16590
  "contextUsagePercent",
@@ -16508,6 +16607,7 @@ function parseHostUsage(value) {
16508
16607
  throw new Error(`Harness Usage contains unknown field '${key}'`);
16509
16608
  }
16510
16609
  }
16610
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
16511
16611
  for (const field of [
16512
16612
  "totalCredits",
16513
16613
  "contextUsagePercent",
@@ -16578,9 +16678,9 @@ function parseHostUsage(value) {
16578
16678
  if (value.costSource !== "publicPrice") {
16579
16679
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
16580
16680
  }
16581
- return { ...value, unpricedModels: [...models] };
16681
+ return { ...value, ...indicators, unpricedModels: [...models] };
16582
16682
  }
16583
- return { ...value };
16683
+ return { ...value, ...indicators };
16584
16684
  }
16585
16685
  var requestTokenFields = [
16586
16686
  "inputTokens",
@@ -21329,6 +21429,8 @@ function projectKimiUsages(payload) {
21329
21429
  return [
21330
21430
  {
21331
21431
  product: "Kimi Code · 5-hour window",
21432
+ periodType: "five_hour",
21433
+ scope: { id: "kimi-code", label: "Kimi Code" },
21332
21434
  usagePercent: share.usedPercent,
21333
21435
  ...share.resetsAt ? { resetsAt: share.resetsAt } : {}
21334
21436
  }
@@ -22785,21 +22887,37 @@ var kimiPermissionModeCatalog = harnessPermissionModeCatalogSchema.parse({
22785
22887
  {
22786
22888
  id: harnessPermissionModeIdSchema.parse("default"),
22787
22889
  label: "询问确认",
22890
+ localizations: {
22891
+ en: { label: "Ask for approval" },
22892
+ "zh-CN": { description: "工具正常执行,需要时手动审批。" }
22893
+ },
22788
22894
  description: "Manual approvals; tools execute normally."
22789
22895
  },
22790
22896
  {
22791
22897
  id: harnessPermissionModeIdSchema.parse("plan"),
22792
22898
  label: "计划模式",
22899
+ localizations: {
22900
+ en: { label: "Plan mode" },
22901
+ "zh-CN": { description: "只读规划,不执行工具。" }
22902
+ },
22793
22903
  description: "Read-only planning; no tool execution."
22794
22904
  },
22795
22905
  {
22796
22906
  id: harnessPermissionModeIdSchema.parse("auto"),
22797
22907
  label: "按需询问",
22908
+ localizations: {
22909
+ en: { label: "Ask as needed" },
22910
+ "zh-CN": { description: "自动批准安全操作。" }
22911
+ },
22798
22912
  description: "Auto-approve safe operations."
22799
22913
  },
22800
22914
  {
22801
22915
  id: harnessPermissionModeIdSchema.parse("yolo"),
22802
22916
  label: "无需询问",
22917
+ localizations: {
22918
+ en: { label: "No approval prompts" },
22919
+ "zh-CN": { description: "自动批准所有操作。" }
22920
+ },
22803
22921
  description: "Auto-approve everything.",
22804
22922
  dangerous: true
22805
22923
  }
@@ -24064,6 +24182,11 @@ async function copyKimiCommandHistory(turns, sessionId, options) {
24064
24182
  }
24065
24183
 
24066
24184
  // dist/slash-commands.js
24185
+ var KIMI_COMPACT_COMMAND = {
24186
+ name: "compact",
24187
+ description: "Compact the conversation context",
24188
+ input: { hint: "prompt" }
24189
+ };
24067
24190
  function buildKimiCommandCatalog(availableCommands) {
24068
24191
  const seenIds = /* @__PURE__ */ new Set();
24069
24192
  const descriptors = [];
@@ -24083,17 +24206,16 @@ function buildKimiCommandCatalog(availableCommands) {
24083
24206
  invocation: `/${cleanId}`,
24084
24207
  label: cleanId,
24085
24208
  argumentMode,
24086
- ...description ? { description } : {}
24209
+ ...description ? { description } : {},
24210
+ // Only the known native built-in gets plugin copy. A live command with
24211
+ // the same name but different wording/input retains its own semantics.
24212
+ ...cleanId === KIMI_COMPACT_COMMAND.name && rawDesc === KIMI_COMPACT_COMMAND.description && command.input?.hint === KIMI_COMPACT_COMMAND.input?.hint ? { localizations: { "zh-CN": { label: "压缩上下文", description: "压缩当前对话上下文" } } } : {}
24087
24213
  });
24088
24214
  }
24089
24215
  return harnessCommandCatalogSchema.parse({ commands: descriptors });
24090
24216
  }
24091
24217
  var KIMI_DEFAULT_COMMANDS = [
24092
- {
24093
- name: "compact",
24094
- description: "Compact the conversation context",
24095
- input: { hint: "prompt" }
24096
- },
24218
+ KIMI_COMPACT_COMMAND,
24097
24219
  {
24098
24220
  name: "status",
24099
24221
  description: "Show current session status"
@@ -24367,6 +24489,8 @@ var KimiSession = class {
24367
24489
  switch (command.type) {
24368
24490
  case "turn.start":
24369
24491
  return this.#handleTurnStart(command);
24492
+ case "turn.steer":
24493
+ return unsupportedSteer("Kimi ACP");
24370
24494
  case "turn.cancel":
24371
24495
  return this.#handleTurnCancel(command);
24372
24496
  case "interaction.respond":
@@ -14944,6 +14944,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
14944
14944
  initializeOnly: external_exports.boolean().optional()
14945
14945
  });
14946
14946
 
14947
+ // ../../shared-contracts/dist/harness-presentation.js
14948
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
14949
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text) => text.trim().length > 0);
14950
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
14951
+ label: displayText(256).optional(),
14952
+ description: displayText(1024).optional()
14953
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
14954
+ var harnessLocalizedTextSchema = external_exports.record(localeSchema, displayText(4096)).refine((entries) => typeof entries.en === "string", "English fallback is required").refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
14955
+
14947
14956
  // ../../shared-contracts/dist/model-price-overrides.js
14948
14957
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
14949
14958
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -14993,10 +15002,19 @@ var model = external_exports.string().min(1).max(512);
14993
15002
  var project = external_exports.string().min(1).max(4096);
14994
15003
  var usageStatisticsParamsSchema = external_exports.strictObject({
14995
15004
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15005
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
15006
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
15007
+ try {
15008
+ new Intl.DateTimeFormat("en", { timeZone: value });
15009
+ return true;
15010
+ } catch {
15011
+ return false;
15012
+ }
15013
+ }, "Unsupported usage statistics timezone").optional(),
14996
15014
  harness: harness.optional(),
14997
15015
  model: model.nullable().optional(),
14998
15016
  project: project.nullable().optional(),
14999
- /** One local date inside the range. */
15017
+ /** One date in the query timezone inside the range. */
15000
15018
  date: localDate.optional()
15001
15019
  });
15002
15020
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -15032,7 +15050,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
15032
15050
  });
15033
15051
  var usageStatisticsResultSchema = external_exports.strictObject({
15034
15052
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15035
- /** First local date of the range; null for all time. */
15053
+ /** First date in the query timezone (Host local when omitted); null for all time. */
15036
15054
  from: localDate.nullable(),
15037
15055
  to: localDate,
15038
15056
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -15072,7 +15090,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
15072
15090
  totals: usageStatisticsTotalsSchema,
15073
15091
  /** Each date and Harness of the range: every filter except the day. */
15074
15092
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
15075
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
15093
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
15076
15094
  hourly: external_exports.array(external_exports.strictObject({
15077
15095
  weekday: external_exports.number().int().min(0).max(6),
15078
15096
  hour: external_exports.number().int().min(0).max(23),
@@ -15132,6 +15150,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
15132
15150
  "codexhost/harness/display-settings/set",
15133
15151
  "codexhost/harness/inspect",
15134
15152
  "codexhost/harness/installation",
15153
+ "codexhost/harness/installation/start",
15154
+ "codexhost/harness/installation/status",
15135
15155
  "codexhost/harness/launch-settings/get",
15136
15156
  "codexhost/harness/launch-settings/set",
15137
15157
  "codexhost/harness/web-ui/open",
@@ -15207,7 +15227,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
15207
15227
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
15208
15228
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
15209
15229
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
15230
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
15231
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
15232
+ kind: external_exports.literal("countdown"),
15233
+ id: external_exports.string().min(1).max(64),
15234
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
15235
+ label: indicatorTextSchema(256).optional(),
15236
+ tooltip: indicatorTextSchema(1024).optional()
15237
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
15238
+ message: "Composer indicator IDs must be unique"
15239
+ });
15210
15240
  var threadUsageSnapshotSchema = external_exports.object({
15241
+ composerIndicators: composerIndicatorsSchema.optional(),
15211
15242
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
15212
15243
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
15213
15244
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -15280,8 +15311,24 @@ var threadUsageSnapshotSchema = external_exports.object({
15280
15311
  }
15281
15312
  });
15282
15313
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
15314
+ var accountCreditsPeriodSchema = external_exports.enum([
15315
+ "weekly",
15316
+ "monthly",
15317
+ "five_hour",
15318
+ "seven_day",
15319
+ "unknown"
15320
+ ]);
15321
+ var accountCreditsScopeSchema = external_exports.object({
15322
+ id: external_exports.string().min(1).max(256),
15323
+ label: external_exports.string().min(1).max(256),
15324
+ localizations: harnessLocalizationsSchema.optional()
15325
+ }).strict();
15283
15326
  var accountCreditsProductUsageSchema = external_exports.object({
15284
15327
  product: external_exports.string().min(1),
15328
+ /** Native period and scope, never inferred from the display name. */
15329
+ periodType: accountCreditsPeriodSchema.optional(),
15330
+ scope: accountCreditsScopeSchema.optional(),
15331
+ localizations: harnessLocalizationsSchema.optional(),
15285
15332
  used: external_exports.number().finite().nonnegative().optional(),
15286
15333
  // Zero is a real empty cap, not an absent field.
15287
15334
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -15301,9 +15348,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
15301
15348
  unit: external_exports.string().min(1).max(32).optional(),
15302
15349
  /** Native label when the primary limit is scoped to a model or product group. */
15303
15350
  label: external_exports.string().min(1).optional(),
15351
+ scope: accountCreditsScopeSchema.optional(),
15352
+ localizations: harnessLocalizationsSchema.optional(),
15304
15353
  usedPercent: usagePercentSchema,
15305
15354
  resetsAt: external_exports.string().min(1).optional(),
15306
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
15355
+ periodType: accountCreditsPeriodSchema,
15307
15356
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
15308
15357
  resetCredits: accountResetCreditsSchema.optional()
15309
15358
  }).strict();
@@ -15314,7 +15363,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
15314
15363
  var threadUsageInspectionSchema = external_exports.object({
15315
15364
  threadId: hostThreadIdSchema,
15316
15365
  usage: threadUsageSnapshotSchema.nullable(),
15317
- accountCredits: accountCreditsSnapshotSchema.optional()
15366
+ accountCredits: accountCreditsSnapshotSchema.optional(),
15367
+ /** Whether this source can provide cached account quota independently of usage. */
15368
+ accountCreditsSupported: external_exports.boolean().optional()
15318
15369
  }).strict();
15319
15370
 
15320
15371
  // ../../shared-contracts/dist/harness-accounts.js
@@ -15441,7 +15492,8 @@ var harnessPermissionModeSchema = external_exports.object({
15441
15492
  id: harnessPermissionModeIdSchema,
15442
15493
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
15443
15494
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
15444
- dangerous: external_exports.boolean().optional()
15495
+ dangerous: external_exports.boolean().optional(),
15496
+ localizations: harnessLocalizationsSchema.optional()
15445
15497
  }).strict();
15446
15498
  var harnessPermissionModeCatalogSchema = external_exports.object({
15447
15499
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -15594,7 +15646,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
15594
15646
  }).strict().optional(),
15595
15647
  autonomousTurns: external_exports.object({
15596
15648
  observe: external_exports.boolean()
15597
- }).strict().optional()
15649
+ }).strict().optional(),
15650
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
15651
+ steer: external_exports.boolean().optional()
15598
15652
  }).strict();
15599
15653
  var harnessConfigurationStateSchema = external_exports.object({
15600
15654
  effectiveModel: harnessModelRefSchema.optional(),
@@ -15641,7 +15695,9 @@ var harnessInspectionSchema = external_exports.union([
15641
15695
  var harnessInspectParamsSchema = external_exports.object({
15642
15696
  harnessId: harnessIdSchema,
15643
15697
  cwd: nonBlankTextSchema2.max(16384).optional(),
15644
- refresh: external_exports.boolean().optional()
15698
+ refresh: external_exports.boolean().optional(),
15699
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
15700
+ purpose: external_exports.literal("availability").optional()
15645
15701
  }).strict();
15646
15702
  var harnessWebUiOpenParamsSchema = external_exports.object({
15647
15703
  harnessId: harnessIdSchema
@@ -15724,6 +15780,15 @@ var threadOwnershipListResultSchema = external_exports.object({
15724
15780
  seen.add(thread.threadId);
15725
15781
  }
15726
15782
  });
15783
+ var threadSteeringInspectParamsSchema = external_exports.object({
15784
+ threadId: hostThreadIdSchema,
15785
+ /** The text about to be steered; a Harness command always stops and restarts. */
15786
+ text: external_exports.string().optional()
15787
+ }).strict();
15788
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
15789
+ var threadSteeringInspectResultSchema = external_exports.object({
15790
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
15791
+ }).strict();
15727
15792
 
15728
15793
  // ../../shared-contracts/dist/harness-plugins.js
15729
15794
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -15825,11 +15890,31 @@ var harnessInstallationStateSchema = external_exports.object({
15825
15890
  latestVersion: external_exports.string().min(1).max(128),
15826
15891
  updateAvailable: external_exports.boolean(),
15827
15892
  canUpdate: external_exports.boolean(),
15893
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
15894
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
15895
+ /** Official download opened by the user; does not imply an automatic installation. */
15896
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
15828
15897
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
15829
15898
  message: external_exports.string().max(2048).optional(),
15830
15899
  messageCode: external_exports.string().min(1).max(128).optional(),
15900
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
15901
+ notice: harnessLocalizedTextSchema.optional(),
15831
15902
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
15832
15903
  }).strict();
15904
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
15905
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
15906
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
15907
+ external_exports.object({
15908
+ taskId: external_exports.string().uuid(),
15909
+ status: external_exports.literal("succeeded"),
15910
+ result: harnessInstallationStateSchema
15911
+ }).strict(),
15912
+ external_exports.object({
15913
+ taskId: external_exports.string().uuid(),
15914
+ status: external_exports.literal("failed"),
15915
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
15916
+ }).strict()
15917
+ ]);
15833
15918
 
15834
15919
  // ../../shared-contracts/dist/codex-accounts.js
15835
15920
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -15954,6 +16039,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
15954
16039
  invocation: commandInvocationSchema,
15955
16040
  label: commandLabelSchema,
15956
16041
  description: commandDescriptionSchema.optional(),
16042
+ localizations: harnessLocalizationsSchema.optional(),
15957
16043
  argumentMode: external_exports.enum(["none", "text"]),
15958
16044
  /**
15959
16045
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -16314,6 +16400,18 @@ function sanitizeDiagnosticTail(value) {
16314
16400
  return redacted.length <= DIAGNOSTIC_TAIL_MAX_LENGTH ? redacted : redacted.slice(-DIAGNOSTIC_TAIL_MAX_LENGTH);
16315
16401
  }
16316
16402
 
16403
+ // ../../harness-adapter/dist/steer.js
16404
+ function unsupportedSteer(harnessLabel) {
16405
+ return {
16406
+ ok: false,
16407
+ error: {
16408
+ code: "unsupported",
16409
+ message: `${harnessLabel} cannot steer an active Turn natively`,
16410
+ retryable: false
16411
+ }
16412
+ };
16413
+ }
16414
+
16317
16415
  // ../../harness-adapter/dist/usage.js
16318
16416
  var tokenFields = [
16319
16417
  "inputTokens",
@@ -16341,6 +16439,7 @@ var usageFields = /* @__PURE__ */ new Set([
16341
16439
  ...safeIntegerFields,
16342
16440
  ...percentFields,
16343
16441
  "sessionCacheUsage",
16442
+ "composerIndicators",
16344
16443
  "totalCostUsd",
16345
16444
  "totalCredits",
16346
16445
  "contextUsagePercent",
@@ -16363,6 +16462,7 @@ function parseHostUsage(value) {
16363
16462
  throw new Error(`Harness Usage contains unknown field '${key}'`);
16364
16463
  }
16365
16464
  }
16465
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
16366
16466
  for (const field of [
16367
16467
  "totalCredits",
16368
16468
  "contextUsagePercent",
@@ -16433,9 +16533,9 @@ function parseHostUsage(value) {
16433
16533
  if (value.costSource !== "publicPrice") {
16434
16534
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
16435
16535
  }
16436
- return { ...value, unpricedModels: [...models] };
16536
+ return { ...value, ...indicators, unpricedModels: [...models] };
16437
16537
  }
16438
- return { ...value };
16538
+ return { ...value, ...indicators };
16439
16539
  }
16440
16540
  var requestTokenFields = [
16441
16541
  "inputTokens",
@@ -21500,6 +21600,7 @@ var KIRO_COMMANDS = [
21500
21600
  {
21501
21601
  id: "kiro.compact",
21502
21602
  invocation: "/compact",
21603
+ localizations: { "zh-CN": { label: "压缩上下文", description: "压缩当前对话上下文" } },
21503
21604
  label: "Compact Conversation",
21504
21605
  description: "Summarize conversation history to free context window",
21505
21606
  argumentMode: "none"
@@ -22710,11 +22811,15 @@ var KIRO_PERMISSION_MODES = [
22710
22811
  {
22711
22812
  id: KIRO_DEFAULT_PERMISSION_MODE_ID,
22712
22813
  label: "Autopilot",
22814
+ localizations: {
22815
+ "zh-CN": { label: "自动执行", description: "在原生策略范围内自动执行工具。" }
22816
+ },
22713
22817
  description: "Automatic tool execution within native policy bounds"
22714
22818
  },
22715
22819
  {
22716
22820
  id: harnessPermissionModeIdSchema.parse("supervised"),
22717
22821
  label: "Supervised",
22822
+ localizations: { "zh-CN": { label: "人工监督", description: "人工审核工具审批与文件修改。" } },
22718
22823
  description: "Manual review of tool approvals and file modifications"
22719
22824
  }
22720
22825
  ];
@@ -23844,6 +23949,8 @@ var KiroSession = class {
23844
23949
  if (command.type === "turn.cancel") {
23845
23950
  return this.#cancelTurn(command);
23846
23951
  }
23952
+ if (command.type === "turn.steer")
23953
+ return unsupportedSteer("Kiro");
23847
23954
  if (command.type === "interaction.respond") {
23848
23955
  return this.#respondInteraction(command);
23849
23956
  }
@@ -24461,6 +24568,10 @@ function createKiroInstallation(environment, command) {
24461
24568
  updateAvailable: false,
24462
24569
  canUpdate: false,
24463
24570
  messageCode: "kiro-native-updater",
24571
+ notice: {
24572
+ en: "Use Kiro CLI's original installer or native updater to check for and install updates.",
24573
+ "zh-CN": "请使用 Kiro CLI 原安装程序或原生更新器检查并安装更新。"
24574
+ },
24464
24575
  message: "Use Kiro CLI's original installer or native updater to check for and install updates."
24465
24576
  };
24466
24577
  };