@codexhost/cli-win32-arm64 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 (34) 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.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
@@ -27590,6 +27590,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
27590
27590
  initializeOnly: external_exports.boolean().optional()
27591
27591
  });
27592
27592
 
27593
+ // ../../shared-contracts/dist/harness-presentation.js
27594
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
27595
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text) => text.trim().length > 0);
27596
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
27597
+ label: displayText(256).optional(),
27598
+ description: displayText(1024).optional()
27599
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
27600
+ 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");
27601
+
27593
27602
  // ../../shared-contracts/dist/model-price-overrides.js
27594
27603
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
27595
27604
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -27639,10 +27648,19 @@ var model = external_exports.string().min(1).max(512);
27639
27648
  var project = external_exports.string().min(1).max(4096);
27640
27649
  var usageStatisticsParamsSchema = external_exports.strictObject({
27641
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(),
27642
27660
  harness: harness.optional(),
27643
27661
  model: model.nullable().optional(),
27644
27662
  project: project.nullable().optional(),
27645
- /** One local date inside the range. */
27663
+ /** One date in the query timezone inside the range. */
27646
27664
  date: localDate.optional()
27647
27665
  });
27648
27666
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27678,7 +27696,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27678
27696
  });
27679
27697
  var usageStatisticsResultSchema = external_exports.strictObject({
27680
27698
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27681
- /** 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. */
27682
27700
  from: localDate.nullable(),
27683
27701
  to: localDate,
27684
27702
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27718,7 +27736,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27718
27736
  totals: usageStatisticsTotalsSchema,
27719
27737
  /** Each date and Harness of the range: every filter except the day. */
27720
27738
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27721
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27739
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27722
27740
  hourly: external_exports.array(external_exports.strictObject({
27723
27741
  weekday: external_exports.number().int().min(0).max(6),
27724
27742
  hour: external_exports.number().int().min(0).max(23),
@@ -27778,6 +27796,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27778
27796
  "codexhost/harness/display-settings/set",
27779
27797
  "codexhost/harness/inspect",
27780
27798
  "codexhost/harness/installation",
27799
+ "codexhost/harness/installation/start",
27800
+ "codexhost/harness/installation/status",
27781
27801
  "codexhost/harness/launch-settings/get",
27782
27802
  "codexhost/harness/launch-settings/set",
27783
27803
  "codexhost/harness/web-ui/open",
@@ -27853,7 +27873,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27853
27873
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27854
27874
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27855
27875
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27876
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27877
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27878
+ kind: external_exports.literal("countdown"),
27879
+ id: external_exports.string().min(1).max(64),
27880
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27881
+ label: indicatorTextSchema(256).optional(),
27882
+ tooltip: indicatorTextSchema(1024).optional()
27883
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27884
+ message: "Composer indicator IDs must be unique"
27885
+ });
27856
27886
  var threadUsageSnapshotSchema = external_exports.object({
27887
+ composerIndicators: composerIndicatorsSchema.optional(),
27857
27888
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27858
27889
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27859
27890
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -27926,8 +27957,24 @@ var threadUsageSnapshotSchema = external_exports.object({
27926
27957
  }
27927
27958
  });
27928
27959
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
27960
+ var accountCreditsPeriodSchema = external_exports.enum([
27961
+ "weekly",
27962
+ "monthly",
27963
+ "five_hour",
27964
+ "seven_day",
27965
+ "unknown"
27966
+ ]);
27967
+ var accountCreditsScopeSchema = external_exports.object({
27968
+ id: external_exports.string().min(1).max(256),
27969
+ label: external_exports.string().min(1).max(256),
27970
+ localizations: harnessLocalizationsSchema.optional()
27971
+ }).strict();
27929
27972
  var accountCreditsProductUsageSchema = external_exports.object({
27930
27973
  product: external_exports.string().min(1),
27974
+ /** Native period and scope, never inferred from the display name. */
27975
+ periodType: accountCreditsPeriodSchema.optional(),
27976
+ scope: accountCreditsScopeSchema.optional(),
27977
+ localizations: harnessLocalizationsSchema.optional(),
27931
27978
  used: external_exports.number().finite().nonnegative().optional(),
27932
27979
  // Zero is a real empty cap, not an absent field.
27933
27980
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -27947,9 +27994,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
27947
27994
  unit: external_exports.string().min(1).max(32).optional(),
27948
27995
  /** Native label when the primary limit is scoped to a model or product group. */
27949
27996
  label: external_exports.string().min(1).optional(),
27997
+ scope: accountCreditsScopeSchema.optional(),
27998
+ localizations: harnessLocalizationsSchema.optional(),
27950
27999
  usedPercent: usagePercentSchema,
27951
28000
  resetsAt: external_exports.string().min(1).optional(),
27952
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
28001
+ periodType: accountCreditsPeriodSchema,
27953
28002
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
27954
28003
  resetCredits: accountResetCreditsSchema.optional()
27955
28004
  }).strict();
@@ -27960,7 +28009,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
27960
28009
  var threadUsageInspectionSchema = external_exports.object({
27961
28010
  threadId: hostThreadIdSchema,
27962
28011
  usage: threadUsageSnapshotSchema.nullable(),
27963
- accountCredits: accountCreditsSnapshotSchema.optional()
28012
+ accountCredits: accountCreditsSnapshotSchema.optional(),
28013
+ /** Whether this source can provide cached account quota independently of usage. */
28014
+ accountCreditsSupported: external_exports.boolean().optional()
27964
28015
  }).strict();
27965
28016
 
27966
28017
  // ../../shared-contracts/dist/harness-accounts.js
@@ -28087,7 +28138,8 @@ var harnessPermissionModeSchema = external_exports.object({
28087
28138
  id: harnessPermissionModeIdSchema,
28088
28139
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
28089
28140
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
28090
- dangerous: external_exports.boolean().optional()
28141
+ dangerous: external_exports.boolean().optional(),
28142
+ localizations: harnessLocalizationsSchema.optional()
28091
28143
  }).strict();
28092
28144
  var harnessPermissionModeCatalogSchema = external_exports.object({
28093
28145
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -28240,7 +28292,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
28240
28292
  }).strict().optional(),
28241
28293
  autonomousTurns: external_exports.object({
28242
28294
  observe: external_exports.boolean()
28243
- }).strict().optional()
28295
+ }).strict().optional(),
28296
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
28297
+ steer: external_exports.boolean().optional()
28244
28298
  }).strict();
28245
28299
  var harnessConfigurationStateSchema = external_exports.object({
28246
28300
  effectiveModel: harnessModelRefSchema.optional(),
@@ -28287,7 +28341,9 @@ var harnessInspectionSchema = external_exports.union([
28287
28341
  var harnessInspectParamsSchema = external_exports.object({
28288
28342
  harnessId: harnessIdSchema,
28289
28343
  cwd: nonBlankTextSchema2.max(16384).optional(),
28290
- refresh: external_exports.boolean().optional()
28344
+ refresh: external_exports.boolean().optional(),
28345
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
28346
+ purpose: external_exports.literal("availability").optional()
28291
28347
  }).strict();
28292
28348
  var harnessWebUiOpenParamsSchema = external_exports.object({
28293
28349
  harnessId: harnessIdSchema
@@ -28370,6 +28426,15 @@ var threadOwnershipListResultSchema = external_exports.object({
28370
28426
  seen.add(thread.threadId);
28371
28427
  }
28372
28428
  });
28429
+ var threadSteeringInspectParamsSchema = external_exports.object({
28430
+ threadId: hostThreadIdSchema,
28431
+ /** The text about to be steered; a Harness command always stops and restarts. */
28432
+ text: external_exports.string().optional()
28433
+ }).strict();
28434
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28435
+ var threadSteeringInspectResultSchema = external_exports.object({
28436
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28437
+ }).strict();
28373
28438
 
28374
28439
  // ../../shared-contracts/dist/harness-plugins.js
28375
28440
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28471,11 +28536,31 @@ var harnessInstallationStateSchema = external_exports.object({
28471
28536
  latestVersion: external_exports.string().min(1).max(128),
28472
28537
  updateAvailable: external_exports.boolean(),
28473
28538
  canUpdate: external_exports.boolean(),
28539
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28540
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28541
+ /** Official download opened by the user; does not imply an automatic installation. */
28542
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28474
28543
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28475
28544
  message: external_exports.string().max(2048).optional(),
28476
28545
  messageCode: external_exports.string().min(1).max(128).optional(),
28546
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
28547
+ notice: harnessLocalizedTextSchema.optional(),
28477
28548
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28478
28549
  }).strict();
28550
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28551
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28552
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28553
+ external_exports.object({
28554
+ taskId: external_exports.string().uuid(),
28555
+ status: external_exports.literal("succeeded"),
28556
+ result: harnessInstallationStateSchema
28557
+ }).strict(),
28558
+ external_exports.object({
28559
+ taskId: external_exports.string().uuid(),
28560
+ status: external_exports.literal("failed"),
28561
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28562
+ }).strict()
28563
+ ]);
28479
28564
 
28480
28565
  // ../../shared-contracts/dist/codex-accounts.js
28481
28566
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -28600,6 +28685,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
28600
28685
  invocation: commandInvocationSchema,
28601
28686
  label: commandLabelSchema,
28602
28687
  description: commandDescriptionSchema.optional(),
28688
+ localizations: harnessLocalizationsSchema.optional(),
28603
28689
  argumentMode: external_exports.enum(["none", "text"]),
28604
28690
  /**
28605
28691
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -29228,6 +29314,18 @@ var HarnessOutputChannel = class {
29228
29314
  }
29229
29315
  };
29230
29316
 
29317
+ // ../../harness-adapter/dist/steer.js
29318
+ function unsupportedSteer(harnessLabel) {
29319
+ return {
29320
+ ok: false,
29321
+ error: {
29322
+ code: "unsupported",
29323
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29324
+ retryable: false
29325
+ }
29326
+ };
29327
+ }
29328
+
29231
29329
  // ../../harness-adapter/dist/usage.js
29232
29330
  var tokenFields = [
29233
29331
  "inputTokens",
@@ -29255,6 +29353,7 @@ var usageFields = /* @__PURE__ */ new Set([
29255
29353
  ...safeIntegerFields,
29256
29354
  ...percentFields,
29257
29355
  "sessionCacheUsage",
29356
+ "composerIndicators",
29258
29357
  "totalCostUsd",
29259
29358
  "totalCredits",
29260
29359
  "contextUsagePercent",
@@ -29277,6 +29376,7 @@ function parseHostUsage(value) {
29277
29376
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29278
29377
  }
29279
29378
  }
29379
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29280
29380
  for (const field of [
29281
29381
  "totalCredits",
29282
29382
  "contextUsagePercent",
@@ -29347,9 +29447,9 @@ function parseHostUsage(value) {
29347
29447
  if (value.costSource !== "publicPrice") {
29348
29448
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29349
29449
  }
29350
- return { ...value, unpricedModels: [...models] };
29450
+ return { ...value, ...indicators, unpricedModels: [...models] };
29351
29451
  }
29352
- return { ...value };
29452
+ return { ...value, ...indicators };
29353
29453
  }
29354
29454
  var requestTokenFields = [
29355
29455
  "inputTokens",
@@ -29451,6 +29551,7 @@ var QODER_FALLBACK_COMMAND_CATALOG = harnessCommandCatalogSchema.parse({
29451
29551
  {
29452
29552
  id: "qoder.compact",
29453
29553
  invocation: "/compact",
29554
+ localizations: { "zh-CN": { label: "压缩上下文", description: "压缩当前对话上下文" } },
29454
29555
  label: "Compact",
29455
29556
  description: "Compresses the context by replacing it with a summary",
29456
29557
  argumentMode: "text"
@@ -30042,26 +30143,35 @@ var QODER_PERMISSION_MODE_CATALOG = harnessPermissionModeCatalogSchema.parse({
30042
30143
  {
30043
30144
  id: "default",
30044
30145
  label: "Default",
30146
+ localizations: { "zh-CN": { label: "默认", description: "执行受保护的工具操作前询问。" } },
30045
30147
  description: "Ask before protected tool actions."
30046
30148
  },
30047
30149
  {
30048
30150
  id: "acceptEdits",
30049
30151
  label: "Accept Edits",
30152
+ localizations: { "zh-CN": { label: "接受编辑", description: "自动接受文件变更。" } },
30050
30153
  description: "Automatically accept file changes."
30051
30154
  },
30052
30155
  {
30053
30156
  id: "auto",
30054
30157
  label: "Auto",
30158
+ localizations: { "zh-CN": { label: "自动", description: "自动允许安全的工具操作。" } },
30055
30159
  description: "Automatically allow safe tool actions."
30056
30160
  },
30057
30161
  {
30058
30162
  id: "plan",
30059
30163
  label: "Plan",
30164
+ localizations: {
30165
+ "zh-CN": { label: "规划模式", description: "仅执行只读操作的规划模式。" }
30166
+ },
30060
30167
  description: "Plan mode with read-only operations."
30061
30168
  },
30062
30169
  {
30063
30170
  id: "bypassPermissions",
30064
30171
  label: "Bypass Permissions",
30172
+ localizations: {
30173
+ "zh-CN": { label: "绕过权限", description: "无需提示即可批准所有工具操作。" }
30174
+ },
30065
30175
  description: "Approve all tool actions without prompting.",
30066
30176
  dangerous: true
30067
30177
  }
@@ -52227,6 +52337,8 @@ var QoderSession = class {
52227
52337
  };
52228
52338
  }
52229
52339
  switch (command.type) {
52340
+ case "turn.steer":
52341
+ return unsupportedSteer("Qoder");
52230
52342
  case "turn.start": {
52231
52343
  if (this.#activeTurn) {
52232
52344
  return {
@@ -52937,10 +53049,13 @@ function usageSessionTitle(value) {
52937
53049
  return void 0;
52938
53050
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
52939
53051
  return normalized;
52940
- const characters = [...normalized];
52941
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
52942
- return normalized;
52943
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53052
+ let title = "";
53053
+ for (const character of normalized) {
53054
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53055
+ break;
53056
+ title += character;
53057
+ }
53058
+ return `${title.trimEnd()}…`;
52944
53059
  }
52945
53060
  function sessionIdOk(value) {
52946
53061
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -53623,6 +53738,10 @@ function createQoderInstallation(environment, command, variant = "global") {
53623
53738
  updateAvailable: false,
53624
53739
  canUpdate: false,
53625
53740
  messageCode: "qoder-check-unavailable",
53741
+ notice: {
53742
+ en: "This Qoder China release does not expose a non-installing update check. Use its original installer.",
53743
+ "zh-CN": "此 Qoder 中国版尚不支持只检查、不安装的更新查询,请使用原安装方式更新。"
53744
+ },
53626
53745
  message: "This Qoder China release does not expose a non-installing update check. Use its original installer."
53627
53746
  };
53628
53747
  const output = await run(["update", "--check"]);