@codexhost/cli-linux-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 (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
@@ -27187,6 +27187,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
27187
27187
  initializeOnly: external_exports.boolean().optional()
27188
27188
  });
27189
27189
 
27190
+ // ../../shared-contracts/dist/harness-presentation.js
27191
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
27192
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text) => text.trim().length > 0);
27193
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
27194
+ label: displayText(256).optional(),
27195
+ description: displayText(1024).optional()
27196
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
27197
+ 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");
27198
+
27190
27199
  // ../../shared-contracts/dist/model-price-overrides.js
27191
27200
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
27192
27201
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -27236,10 +27245,19 @@ var model = external_exports.string().min(1).max(512);
27236
27245
  var project = external_exports.string().min(1).max(4096);
27237
27246
  var usageStatisticsParamsSchema = external_exports.strictObject({
27238
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(),
27239
27257
  harness: harness.optional(),
27240
27258
  model: model.nullable().optional(),
27241
27259
  project: project.nullable().optional(),
27242
- /** One local date inside the range. */
27260
+ /** One date in the query timezone inside the range. */
27243
27261
  date: localDate.optional()
27244
27262
  });
27245
27263
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27275,7 +27293,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27275
27293
  });
27276
27294
  var usageStatisticsResultSchema = external_exports.strictObject({
27277
27295
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27278
- /** 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. */
27279
27297
  from: localDate.nullable(),
27280
27298
  to: localDate,
27281
27299
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27315,7 +27333,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27315
27333
  totals: usageStatisticsTotalsSchema,
27316
27334
  /** Each date and Harness of the range: every filter except the day. */
27317
27335
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27318
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27336
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27319
27337
  hourly: external_exports.array(external_exports.strictObject({
27320
27338
  weekday: external_exports.number().int().min(0).max(6),
27321
27339
  hour: external_exports.number().int().min(0).max(23),
@@ -27375,6 +27393,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27375
27393
  "codexhost/harness/display-settings/set",
27376
27394
  "codexhost/harness/inspect",
27377
27395
  "codexhost/harness/installation",
27396
+ "codexhost/harness/installation/start",
27397
+ "codexhost/harness/installation/status",
27378
27398
  "codexhost/harness/launch-settings/get",
27379
27399
  "codexhost/harness/launch-settings/set",
27380
27400
  "codexhost/harness/web-ui/open",
@@ -27450,7 +27470,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27450
27470
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27451
27471
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27452
27472
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27473
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27474
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27475
+ kind: external_exports.literal("countdown"),
27476
+ id: external_exports.string().min(1).max(64),
27477
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27478
+ label: indicatorTextSchema(256).optional(),
27479
+ tooltip: indicatorTextSchema(1024).optional()
27480
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27481
+ message: "Composer indicator IDs must be unique"
27482
+ });
27453
27483
  var threadUsageSnapshotSchema = external_exports.object({
27484
+ composerIndicators: composerIndicatorsSchema.optional(),
27454
27485
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27455
27486
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27456
27487
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -27523,8 +27554,24 @@ var threadUsageSnapshotSchema = external_exports.object({
27523
27554
  }
27524
27555
  });
27525
27556
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
27557
+ var accountCreditsPeriodSchema = external_exports.enum([
27558
+ "weekly",
27559
+ "monthly",
27560
+ "five_hour",
27561
+ "seven_day",
27562
+ "unknown"
27563
+ ]);
27564
+ var accountCreditsScopeSchema = external_exports.object({
27565
+ id: external_exports.string().min(1).max(256),
27566
+ label: external_exports.string().min(1).max(256),
27567
+ localizations: harnessLocalizationsSchema.optional()
27568
+ }).strict();
27526
27569
  var accountCreditsProductUsageSchema = external_exports.object({
27527
27570
  product: external_exports.string().min(1),
27571
+ /** Native period and scope, never inferred from the display name. */
27572
+ periodType: accountCreditsPeriodSchema.optional(),
27573
+ scope: accountCreditsScopeSchema.optional(),
27574
+ localizations: harnessLocalizationsSchema.optional(),
27528
27575
  used: external_exports.number().finite().nonnegative().optional(),
27529
27576
  // Zero is a real empty cap, not an absent field.
27530
27577
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -27544,9 +27591,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
27544
27591
  unit: external_exports.string().min(1).max(32).optional(),
27545
27592
  /** Native label when the primary limit is scoped to a model or product group. */
27546
27593
  label: external_exports.string().min(1).optional(),
27594
+ scope: accountCreditsScopeSchema.optional(),
27595
+ localizations: harnessLocalizationsSchema.optional(),
27547
27596
  usedPercent: usagePercentSchema,
27548
27597
  resetsAt: external_exports.string().min(1).optional(),
27549
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
27598
+ periodType: accountCreditsPeriodSchema,
27550
27599
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
27551
27600
  resetCredits: accountResetCreditsSchema.optional()
27552
27601
  }).strict();
@@ -27557,7 +27606,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
27557
27606
  var threadUsageInspectionSchema = external_exports.object({
27558
27607
  threadId: hostThreadIdSchema,
27559
27608
  usage: threadUsageSnapshotSchema.nullable(),
27560
- accountCredits: accountCreditsSnapshotSchema.optional()
27609
+ accountCredits: accountCreditsSnapshotSchema.optional(),
27610
+ /** Whether this source can provide cached account quota independently of usage. */
27611
+ accountCreditsSupported: external_exports.boolean().optional()
27561
27612
  }).strict();
27562
27613
 
27563
27614
  // ../../shared-contracts/dist/harness-accounts.js
@@ -27684,7 +27735,8 @@ var harnessPermissionModeSchema = external_exports.object({
27684
27735
  id: harnessPermissionModeIdSchema,
27685
27736
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
27686
27737
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
27687
- dangerous: external_exports.boolean().optional()
27738
+ dangerous: external_exports.boolean().optional(),
27739
+ localizations: harnessLocalizationsSchema.optional()
27688
27740
  }).strict();
27689
27741
  var harnessPermissionModeCatalogSchema = external_exports.object({
27690
27742
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -27837,7 +27889,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
27837
27889
  }).strict().optional(),
27838
27890
  autonomousTurns: external_exports.object({
27839
27891
  observe: external_exports.boolean()
27840
- }).strict().optional()
27892
+ }).strict().optional(),
27893
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
27894
+ steer: external_exports.boolean().optional()
27841
27895
  }).strict();
27842
27896
  var harnessConfigurationStateSchema = external_exports.object({
27843
27897
  effectiveModel: harnessModelRefSchema.optional(),
@@ -27884,7 +27938,9 @@ var harnessInspectionSchema = external_exports.union([
27884
27938
  var harnessInspectParamsSchema = external_exports.object({
27885
27939
  harnessId: harnessIdSchema,
27886
27940
  cwd: nonBlankTextSchema2.max(16384).optional(),
27887
- refresh: external_exports.boolean().optional()
27941
+ refresh: external_exports.boolean().optional(),
27942
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
27943
+ purpose: external_exports.literal("availability").optional()
27888
27944
  }).strict();
27889
27945
  var harnessWebUiOpenParamsSchema = external_exports.object({
27890
27946
  harnessId: harnessIdSchema
@@ -27967,6 +28023,15 @@ var threadOwnershipListResultSchema = external_exports.object({
27967
28023
  seen.add(thread.threadId);
27968
28024
  }
27969
28025
  });
28026
+ var threadSteeringInspectParamsSchema = external_exports.object({
28027
+ threadId: hostThreadIdSchema,
28028
+ /** The text about to be steered; a Harness command always stops and restarts. */
28029
+ text: external_exports.string().optional()
28030
+ }).strict();
28031
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28032
+ var threadSteeringInspectResultSchema = external_exports.object({
28033
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28034
+ }).strict();
27970
28035
 
27971
28036
  // ../../shared-contracts/dist/harness-plugins.js
27972
28037
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28068,11 +28133,31 @@ var harnessInstallationStateSchema = external_exports.object({
28068
28133
  latestVersion: external_exports.string().min(1).max(128),
28069
28134
  updateAvailable: external_exports.boolean(),
28070
28135
  canUpdate: external_exports.boolean(),
28136
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28137
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28138
+ /** Official download opened by the user; does not imply an automatic installation. */
28139
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28071
28140
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28072
28141
  message: external_exports.string().max(2048).optional(),
28073
28142
  messageCode: external_exports.string().min(1).max(128).optional(),
28143
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
28144
+ notice: harnessLocalizedTextSchema.optional(),
28074
28145
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28075
28146
  }).strict();
28147
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28148
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28149
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28150
+ external_exports.object({
28151
+ taskId: external_exports.string().uuid(),
28152
+ status: external_exports.literal("succeeded"),
28153
+ result: harnessInstallationStateSchema
28154
+ }).strict(),
28155
+ external_exports.object({
28156
+ taskId: external_exports.string().uuid(),
28157
+ status: external_exports.literal("failed"),
28158
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28159
+ }).strict()
28160
+ ]);
28076
28161
 
28077
28162
  // ../../shared-contracts/dist/codex-accounts.js
28078
28163
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -28197,6 +28282,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
28197
28282
  invocation: commandInvocationSchema,
28198
28283
  label: commandLabelSchema,
28199
28284
  description: commandDescriptionSchema.optional(),
28285
+ localizations: harnessLocalizationsSchema.optional(),
28200
28286
  argumentMode: external_exports.enum(["none", "text"]),
28201
28287
  /**
28202
28288
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -29230,6 +29316,18 @@ var HarnessOutputChannel = class {
29230
29316
  }
29231
29317
  };
29232
29318
 
29319
+ // ../../harness-adapter/dist/steer.js
29320
+ function unsupportedSteer(harnessLabel) {
29321
+ return {
29322
+ ok: false,
29323
+ error: {
29324
+ code: "unsupported",
29325
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29326
+ retryable: false
29327
+ }
29328
+ };
29329
+ }
29330
+
29233
29331
  // ../../harness-adapter/dist/usage.js
29234
29332
  var tokenFields = [
29235
29333
  "inputTokens",
@@ -29257,6 +29355,7 @@ var usageFields = /* @__PURE__ */ new Set([
29257
29355
  ...safeIntegerFields,
29258
29356
  ...percentFields,
29259
29357
  "sessionCacheUsage",
29358
+ "composerIndicators",
29260
29359
  "totalCostUsd",
29261
29360
  "totalCredits",
29262
29361
  "contextUsagePercent",
@@ -29279,6 +29378,7 @@ function parseHostUsage(value) {
29279
29378
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29280
29379
  }
29281
29380
  }
29381
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29282
29382
  for (const field of [
29283
29383
  "totalCredits",
29284
29384
  "contextUsagePercent",
@@ -29349,9 +29449,9 @@ function parseHostUsage(value) {
29349
29449
  if (value.costSource !== "publicPrice") {
29350
29450
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29351
29451
  }
29352
- return { ...value, unpricedModels: [...models] };
29452
+ return { ...value, ...indicators, unpricedModels: [...models] };
29353
29453
  }
29354
- return { ...value };
29454
+ return { ...value, ...indicators };
29355
29455
  }
29356
29456
  var requestTokenFields = [
29357
29457
  "inputTokens",
@@ -29453,6 +29553,7 @@ var QODER_FALLBACK_COMMAND_CATALOG = harnessCommandCatalogSchema.parse({
29453
29553
  {
29454
29554
  id: "qoder.compact",
29455
29555
  invocation: "/compact",
29556
+ localizations: { "zh-CN": { label: "压缩上下文", description: "压缩当前对话上下文" } },
29456
29557
  label: "Compact",
29457
29558
  description: "Compresses the context by replacing it with a summary",
29458
29559
  argumentMode: "text"
@@ -30044,26 +30145,35 @@ var QODER_PERMISSION_MODE_CATALOG = harnessPermissionModeCatalogSchema.parse({
30044
30145
  {
30045
30146
  id: "default",
30046
30147
  label: "Default",
30148
+ localizations: { "zh-CN": { label: "默认", description: "执行受保护的工具操作前询问。" } },
30047
30149
  description: "Ask before protected tool actions."
30048
30150
  },
30049
30151
  {
30050
30152
  id: "acceptEdits",
30051
30153
  label: "Accept Edits",
30154
+ localizations: { "zh-CN": { label: "接受编辑", description: "自动接受文件变更。" } },
30052
30155
  description: "Automatically accept file changes."
30053
30156
  },
30054
30157
  {
30055
30158
  id: "auto",
30056
30159
  label: "Auto",
30160
+ localizations: { "zh-CN": { label: "自动", description: "自动允许安全的工具操作。" } },
30057
30161
  description: "Automatically allow safe tool actions."
30058
30162
  },
30059
30163
  {
30060
30164
  id: "plan",
30061
30165
  label: "Plan",
30166
+ localizations: {
30167
+ "zh-CN": { label: "规划模式", description: "仅执行只读操作的规划模式。" }
30168
+ },
30062
30169
  description: "Plan mode with read-only operations."
30063
30170
  },
30064
30171
  {
30065
30172
  id: "bypassPermissions",
30066
30173
  label: "Bypass Permissions",
30174
+ localizations: {
30175
+ "zh-CN": { label: "绕过权限", description: "无需提示即可批准所有工具操作。" }
30176
+ },
30067
30177
  description: "Approve all tool actions without prompting.",
30068
30178
  dangerous: true
30069
30179
  }
@@ -52229,6 +52339,8 @@ var QoderSession = class {
52229
52339
  };
52230
52340
  }
52231
52341
  switch (command.type) {
52342
+ case "turn.steer":
52343
+ return unsupportedSteer("Qoder");
52232
52344
  case "turn.start": {
52233
52345
  if (this.#activeTurn) {
52234
52346
  return {
@@ -52939,10 +53051,13 @@ function usageSessionTitle(value) {
52939
53051
  return void 0;
52940
53052
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
52941
53053
  return normalized;
52942
- const characters = [...normalized];
52943
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
52944
- return normalized;
52945
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53054
+ let title = "";
53055
+ for (const character of normalized) {
53056
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53057
+ break;
53058
+ title += character;
53059
+ }
53060
+ return `${title.trimEnd()}…`;
52946
53061
  }
52947
53062
  function sessionIdOk(value) {
52948
53063
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -53625,6 +53740,10 @@ function createQoderInstallation(environment, command, variant = "global") {
53625
53740
  updateAvailable: false,
53626
53741
  canUpdate: false,
53627
53742
  messageCode: "qoder-check-unavailable",
53743
+ notice: {
53744
+ en: "This Qoder China release does not expose a non-installing update check. Use its original installer.",
53745
+ "zh-CN": "此 Qoder 中国版尚不支持只检查、不安装的更新查询,请使用原安装方式更新。"
53746
+ },
53628
53747
  message: "This Qoder China release does not expose a non-installing update check. Use its original installer."
53629
53748
  };
53630
53749
  const output = await run(["update", "--check"]);