@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
@@ -14965,6 +14965,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
14965
14965
  initializeOnly: external_exports.boolean().optional()
14966
14966
  });
14967
14967
 
14968
+ // ../../shared-contracts/dist/harness-presentation.js
14969
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
14970
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text2) => text2.trim().length > 0);
14971
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
14972
+ label: displayText(256).optional(),
14973
+ description: displayText(1024).optional()
14974
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
14975
+ 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");
14976
+
14968
14977
  // ../../shared-contracts/dist/model-price-overrides.js
14969
14978
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
14970
14979
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -15014,10 +15023,19 @@ var model = external_exports.string().min(1).max(512);
15014
15023
  var project = external_exports.string().min(1).max(4096);
15015
15024
  var usageStatisticsParamsSchema = external_exports.strictObject({
15016
15025
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15026
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
15027
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
15028
+ try {
15029
+ new Intl.DateTimeFormat("en", { timeZone: value });
15030
+ return true;
15031
+ } catch {
15032
+ return false;
15033
+ }
15034
+ }, "Unsupported usage statistics timezone").optional(),
15017
15035
  harness: harness.optional(),
15018
15036
  model: model.nullable().optional(),
15019
15037
  project: project.nullable().optional(),
15020
- /** One local date inside the range. */
15038
+ /** One date in the query timezone inside the range. */
15021
15039
  date: localDate.optional()
15022
15040
  });
15023
15041
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -15053,7 +15071,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
15053
15071
  });
15054
15072
  var usageStatisticsResultSchema = external_exports.strictObject({
15055
15073
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15056
- /** First local date of the range; null for all time. */
15074
+ /** First date in the query timezone (Host local when omitted); null for all time. */
15057
15075
  from: localDate.nullable(),
15058
15076
  to: localDate,
15059
15077
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -15093,7 +15111,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
15093
15111
  totals: usageStatisticsTotalsSchema,
15094
15112
  /** Each date and Harness of the range: every filter except the day. */
15095
15113
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
15096
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
15114
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
15097
15115
  hourly: external_exports.array(external_exports.strictObject({
15098
15116
  weekday: external_exports.number().int().min(0).max(6),
15099
15117
  hour: external_exports.number().int().min(0).max(23),
@@ -15153,6 +15171,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
15153
15171
  "codexhost/harness/display-settings/set",
15154
15172
  "codexhost/harness/inspect",
15155
15173
  "codexhost/harness/installation",
15174
+ "codexhost/harness/installation/start",
15175
+ "codexhost/harness/installation/status",
15156
15176
  "codexhost/harness/launch-settings/get",
15157
15177
  "codexhost/harness/launch-settings/set",
15158
15178
  "codexhost/harness/web-ui/open",
@@ -15228,7 +15248,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
15228
15248
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
15229
15249
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
15230
15250
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
15251
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text2) => text2.length <= maximum));
15252
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
15253
+ kind: external_exports.literal("countdown"),
15254
+ id: external_exports.string().min(1).max(64),
15255
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
15256
+ label: indicatorTextSchema(256).optional(),
15257
+ tooltip: indicatorTextSchema(1024).optional()
15258
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
15259
+ message: "Composer indicator IDs must be unique"
15260
+ });
15231
15261
  var threadUsageSnapshotSchema = external_exports.object({
15262
+ composerIndicators: composerIndicatorsSchema.optional(),
15232
15263
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
15233
15264
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
15234
15265
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -15301,8 +15332,24 @@ var threadUsageSnapshotSchema = external_exports.object({
15301
15332
  }
15302
15333
  });
15303
15334
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
15335
+ var accountCreditsPeriodSchema = external_exports.enum([
15336
+ "weekly",
15337
+ "monthly",
15338
+ "five_hour",
15339
+ "seven_day",
15340
+ "unknown"
15341
+ ]);
15342
+ var accountCreditsScopeSchema = external_exports.object({
15343
+ id: external_exports.string().min(1).max(256),
15344
+ label: external_exports.string().min(1).max(256),
15345
+ localizations: harnessLocalizationsSchema.optional()
15346
+ }).strict();
15304
15347
  var accountCreditsProductUsageSchema = external_exports.object({
15305
15348
  product: external_exports.string().min(1),
15349
+ /** Native period and scope, never inferred from the display name. */
15350
+ periodType: accountCreditsPeriodSchema.optional(),
15351
+ scope: accountCreditsScopeSchema.optional(),
15352
+ localizations: harnessLocalizationsSchema.optional(),
15306
15353
  used: external_exports.number().finite().nonnegative().optional(),
15307
15354
  // Zero is a real empty cap, not an absent field.
15308
15355
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -15322,9 +15369,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
15322
15369
  unit: external_exports.string().min(1).max(32).optional(),
15323
15370
  /** Native label when the primary limit is scoped to a model or product group. */
15324
15371
  label: external_exports.string().min(1).optional(),
15372
+ scope: accountCreditsScopeSchema.optional(),
15373
+ localizations: harnessLocalizationsSchema.optional(),
15325
15374
  usedPercent: usagePercentSchema,
15326
15375
  resetsAt: external_exports.string().min(1).optional(),
15327
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
15376
+ periodType: accountCreditsPeriodSchema,
15328
15377
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
15329
15378
  resetCredits: accountResetCreditsSchema.optional()
15330
15379
  }).strict();
@@ -15335,7 +15384,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
15335
15384
  var threadUsageInspectionSchema = external_exports.object({
15336
15385
  threadId: hostThreadIdSchema,
15337
15386
  usage: threadUsageSnapshotSchema.nullable(),
15338
- accountCredits: accountCreditsSnapshotSchema.optional()
15387
+ accountCredits: accountCreditsSnapshotSchema.optional(),
15388
+ /** Whether this source can provide cached account quota independently of usage. */
15389
+ accountCreditsSupported: external_exports.boolean().optional()
15339
15390
  }).strict();
15340
15391
 
15341
15392
  // ../../shared-contracts/dist/harness-accounts.js
@@ -15462,7 +15513,8 @@ var harnessPermissionModeSchema = external_exports.object({
15462
15513
  id: harnessPermissionModeIdSchema,
15463
15514
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
15464
15515
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
15465
- dangerous: external_exports.boolean().optional()
15516
+ dangerous: external_exports.boolean().optional(),
15517
+ localizations: harnessLocalizationsSchema.optional()
15466
15518
  }).strict();
15467
15519
  var harnessPermissionModeCatalogSchema = external_exports.object({
15468
15520
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -15615,7 +15667,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
15615
15667
  }).strict().optional(),
15616
15668
  autonomousTurns: external_exports.object({
15617
15669
  observe: external_exports.boolean()
15618
- }).strict().optional()
15670
+ }).strict().optional(),
15671
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
15672
+ steer: external_exports.boolean().optional()
15619
15673
  }).strict();
15620
15674
  var harnessConfigurationStateSchema = external_exports.object({
15621
15675
  effectiveModel: harnessModelRefSchema.optional(),
@@ -15662,7 +15716,9 @@ var harnessInspectionSchema = external_exports.union([
15662
15716
  var harnessInspectParamsSchema = external_exports.object({
15663
15717
  harnessId: harnessIdSchema,
15664
15718
  cwd: nonBlankTextSchema2.max(16384).optional(),
15665
- refresh: external_exports.boolean().optional()
15719
+ refresh: external_exports.boolean().optional(),
15720
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
15721
+ purpose: external_exports.literal("availability").optional()
15666
15722
  }).strict();
15667
15723
  var harnessWebUiOpenParamsSchema = external_exports.object({
15668
15724
  harnessId: harnessIdSchema
@@ -15745,6 +15801,15 @@ var threadOwnershipListResultSchema = external_exports.object({
15745
15801
  seen.add(thread.threadId);
15746
15802
  }
15747
15803
  });
15804
+ var threadSteeringInspectParamsSchema = external_exports.object({
15805
+ threadId: hostThreadIdSchema,
15806
+ /** The text about to be steered; a Harness command always stops and restarts. */
15807
+ text: external_exports.string().optional()
15808
+ }).strict();
15809
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
15810
+ var threadSteeringInspectResultSchema = external_exports.object({
15811
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
15812
+ }).strict();
15748
15813
 
15749
15814
  // ../../shared-contracts/dist/harness-plugins.js
15750
15815
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -15846,11 +15911,31 @@ var harnessInstallationStateSchema = external_exports.object({
15846
15911
  latestVersion: external_exports.string().min(1).max(128),
15847
15912
  updateAvailable: external_exports.boolean(),
15848
15913
  canUpdate: external_exports.boolean(),
15914
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
15915
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
15916
+ /** Official download opened by the user; does not imply an automatic installation. */
15917
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
15849
15918
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
15850
15919
  message: external_exports.string().max(2048).optional(),
15851
15920
  messageCode: external_exports.string().min(1).max(128).optional(),
15921
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
15922
+ notice: harnessLocalizedTextSchema.optional(),
15852
15923
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
15853
15924
  }).strict();
15925
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
15926
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
15927
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
15928
+ external_exports.object({
15929
+ taskId: external_exports.string().uuid(),
15930
+ status: external_exports.literal("succeeded"),
15931
+ result: harnessInstallationStateSchema
15932
+ }).strict(),
15933
+ external_exports.object({
15934
+ taskId: external_exports.string().uuid(),
15935
+ status: external_exports.literal("failed"),
15936
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
15937
+ }).strict()
15938
+ ]);
15854
15939
 
15855
15940
  // ../../shared-contracts/dist/codex-accounts.js
15856
15941
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -15975,6 +16060,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
15975
16060
  invocation: commandInvocationSchema,
15976
16061
  label: commandLabelSchema,
15977
16062
  description: commandDescriptionSchema.optional(),
16063
+ localizations: harnessLocalizationsSchema.optional(),
15978
16064
  argumentMode: external_exports.enum(["none", "text"]),
15979
16065
  /**
15980
16066
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -16335,6 +16421,18 @@ function sanitizeDiagnosticTail(value) {
16335
16421
  return redacted.length <= DIAGNOSTIC_TAIL_MAX_LENGTH ? redacted : redacted.slice(-DIAGNOSTIC_TAIL_MAX_LENGTH);
16336
16422
  }
16337
16423
 
16424
+ // ../../harness-adapter/dist/steer.js
16425
+ function unsupportedSteer(harnessLabel) {
16426
+ return {
16427
+ ok: false,
16428
+ error: {
16429
+ code: "unsupported",
16430
+ message: `${harnessLabel} cannot steer an active Turn natively`,
16431
+ retryable: false
16432
+ }
16433
+ };
16434
+ }
16435
+
16338
16436
  // ../../harness-adapter/dist/usage.js
16339
16437
  var tokenFields = [
16340
16438
  "inputTokens",
@@ -16362,6 +16460,7 @@ var usageFields = /* @__PURE__ */ new Set([
16362
16460
  ...safeIntegerFields,
16363
16461
  ...percentFields,
16364
16462
  "sessionCacheUsage",
16463
+ "composerIndicators",
16365
16464
  "totalCostUsd",
16366
16465
  "totalCredits",
16367
16466
  "contextUsagePercent",
@@ -18488,10 +18587,13 @@ function usageSessionTitle(value) {
18488
18587
  return void 0;
18489
18588
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
18490
18589
  return normalized;
18491
- const characters = [...normalized];
18492
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
18493
- return normalized;
18494
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
18590
+ let title = "";
18591
+ for (const character of normalized) {
18592
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
18593
+ break;
18594
+ title += character;
18595
+ }
18596
+ return `${title.trimEnd()}…`;
18495
18597
  }
18496
18598
  function sessionIdOk(value) {
18497
18599
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -19480,6 +19582,8 @@ var HermesSession = class {
19480
19582
  switch (command.type) {
19481
19583
  case "turn.start":
19482
19584
  return this.#startTurn(command);
19585
+ case "turn.steer":
19586
+ return Promise.resolve(unsupportedSteer("Hermes"));
19483
19587
  case "turn.cancel":
19484
19588
  return this.#cancelTurn(command);
19485
19589
  case "interaction.respond":
@@ -19980,11 +20084,23 @@ function gatewayPermissionModes() {
19980
20084
  {
19981
20085
  id: "default",
19982
20086
  label: "原生审批策略",
20087
+ localizations: {
20088
+ en: {
20089
+ label: "Native approval policy",
20090
+ description: "Follow the Hermes global approval policy; disable YOLO for this Session."
20091
+ }
20092
+ },
19983
20093
  description: "遵循 Hermes 全局审批策略,关闭本会话 YOLO。"
19984
20094
  },
19985
20095
  {
19986
20096
  id: "dont_ask",
19987
20097
  label: "会话 YOLO",
20098
+ localizations: {
20099
+ en: {
20100
+ label: "Session YOLO",
20101
+ description: "Automatically approve Hermes tool actions in this Session."
20102
+ }
20103
+ },
19988
20104
  description: "本会话自动批准 Hermes 工具操作。",
19989
20105
  dangerous: true
19990
20106
  }
@@ -20387,6 +20503,10 @@ function createHermesInstallation(environment, command) {
20387
20503
  updateAvailable: false,
20388
20504
  canUpdate: false,
20389
20505
  messageCode: "hermes-update-plan-unavailable",
20506
+ notice: {
20507
+ en: "This Hermes release does not expose a safe update plan. Use the original installer.",
20508
+ "zh-CN": "此 Hermes 版本不提供安全的更新计划,请使用原安装方式更新。"
20509
+ },
20390
20510
  message: "This Hermes release does not expose a safe update plan. Use the original installer."
20391
20511
  };
20392
20512
  const plan = await run(["update", "--plan"]);
@@ -20399,6 +20519,10 @@ function createHermesInstallation(environment, command) {
20399
20519
  updateAvailable: false,
20400
20520
  canUpdate: false,
20401
20521
  messageCode: "hermes-externally-managed",
20522
+ notice: {
20523
+ en: "This Hermes installation is managed externally. Update it through its desktop app, container, or original package manager.",
20524
+ "zh-CN": "此 Hermes 安装由外部工具管理,请通过其桌面应用、容器或原包管理器更新。"
20525
+ },
20402
20526
  message: "This Hermes installation is managed externally. Update it through its desktop app, container, or original package manager."
20403
20527
  };
20404
20528
  const output = await run(["update", "--check"]);
@@ -20417,6 +20541,13 @@ function createHermesInstallation(environment, command) {
20417
20541
  canUpdate,
20418
20542
  ...updateAvailable && !release ? { latestVersionKind: "tracking-branch" } : {},
20419
20543
  messageCode: canUpdate ? "hermes-update-channel" : "hermes-manual-update",
20544
+ notice: canUpdate ? {
20545
+ en: "Uses Hermes's configured update channel. Gateway restarts are deferred; existing processes keep their running code.",
20546
+ "zh-CN": "使用 Hermes 配置的更新渠道,暂不重启 Gateway;现有进程继续运行原有代码。"
20547
+ } : {
20548
+ en: "Use the native updater manually. Safe non-interactive updates require a clean source checkout, commit identity, and Gateway restart deferral.",
20549
+ "zh-CN": "请手动使用原生更新器。安全的非交互更新要求源码目录无未提交修改、可识别当前提交,并支持推迟 Gateway 重启。"
20550
+ },
20420
20551
  message: canUpdate ? "Uses Hermes's configured update channel. Gateway restarts are deferred; existing processes keep their running code." : "Use the native updater manually. Safe non-interactive updates require a clean source checkout, commit identity, and Gateway restart deferral."
20421
20552
  };
20422
20553
  },