@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
@@ -22,10 +22,13 @@ function usageSessionTitle(value) {
22
22
  return void 0;
23
23
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
24
24
  return normalized;
25
- const characters = [...normalized];
26
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
27
- return normalized;
28
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
25
+ let title = "";
26
+ for (const character of normalized) {
27
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
28
+ break;
29
+ title += character;
30
+ }
31
+ return `${title.trimEnd()}…`;
29
32
  }
30
33
  function sessionIdOk(value) {
31
34
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -14787,6 +14790,15 @@ var harnessDisplaySetSchema = external_exports.strictObject({
14787
14790
  initializeOnly: external_exports.boolean().optional()
14788
14791
  });
14789
14792
 
14793
+ // ../../shared-contracts/dist/harness-presentation.js
14794
+ var localeSchema = external_exports.string().max(64).regex(/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u);
14795
+ var displayText = (maximum) => external_exports.string().min(1).max(maximum).refine((text2) => text2.trim().length > 0);
14796
+ var harnessLocalizationsSchema = external_exports.record(localeSchema, external_exports.object({
14797
+ label: displayText(256).optional(),
14798
+ description: displayText(1024).optional()
14799
+ }).strict()).refine((entries) => Object.keys(entries).length <= 16, "Too many locales");
14800
+ 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");
14801
+
14790
14802
  // ../../shared-contracts/dist/model-price-overrides.js
14791
14803
  var usdPerMillionTokens = external_exports.number().finite().nonnegative();
14792
14804
  var modelPriceOverrideSchema = external_exports.strictObject({
@@ -14836,10 +14848,19 @@ var model = external_exports.string().min(1).max(512);
14836
14848
  var project = external_exports.string().min(1).max(4096);
14837
14849
  var usageStatisticsParamsSchema = external_exports.strictObject({
14838
14850
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
14851
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
14852
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
14853
+ try {
14854
+ new Intl.DateTimeFormat("en", { timeZone: value });
14855
+ return true;
14856
+ } catch {
14857
+ return false;
14858
+ }
14859
+ }, "Unsupported usage statistics timezone").optional(),
14839
14860
  harness: harness.optional(),
14840
14861
  model: model.nullable().optional(),
14841
14862
  project: project.nullable().optional(),
14842
- /** One local date inside the range. */
14863
+ /** One date in the query timezone inside the range. */
14843
14864
  date: localDate.optional()
14844
14865
  });
14845
14866
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -14875,7 +14896,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
14875
14896
  });
14876
14897
  var usageStatisticsResultSchema = external_exports.strictObject({
14877
14898
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
14878
- /** First local date of the range; null for all time. */
14899
+ /** First date in the query timezone (Host local when omitted); null for all time. */
14879
14900
  from: localDate.nullable(),
14880
14901
  to: localDate,
14881
14902
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -14915,7 +14936,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
14915
14936
  totals: usageStatisticsTotalsSchema,
14916
14937
  /** Each date and Harness of the range: every filter except the day. */
14917
14938
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
14918
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
14939
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
14919
14940
  hourly: external_exports.array(external_exports.strictObject({
14920
14941
  weekday: external_exports.number().int().min(0).max(6),
14921
14942
  hour: external_exports.number().int().min(0).max(23),
@@ -14975,6 +14996,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
14975
14996
  "codexhost/harness/display-settings/set",
14976
14997
  "codexhost/harness/inspect",
14977
14998
  "codexhost/harness/installation",
14999
+ "codexhost/harness/installation/start",
15000
+ "codexhost/harness/installation/status",
14978
15001
  "codexhost/harness/launch-settings/get",
14979
15002
  "codexhost/harness/launch-settings/set",
14980
15003
  "codexhost/harness/web-ui/open",
@@ -15050,7 +15073,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
15050
15073
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
15051
15074
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
15052
15075
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
15076
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text2) => text2.length <= maximum));
15077
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
15078
+ kind: external_exports.literal("countdown"),
15079
+ id: external_exports.string().min(1).max(64),
15080
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
15081
+ label: indicatorTextSchema(256).optional(),
15082
+ tooltip: indicatorTextSchema(1024).optional()
15083
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
15084
+ message: "Composer indicator IDs must be unique"
15085
+ });
15053
15086
  var threadUsageSnapshotSchema = external_exports.object({
15087
+ composerIndicators: composerIndicatorsSchema.optional(),
15054
15088
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
15055
15089
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
15056
15090
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -15123,8 +15157,24 @@ var threadUsageSnapshotSchema = external_exports.object({
15123
15157
  }
15124
15158
  });
15125
15159
  var usagePercentSchema = external_exports.number().finite().min(0).max(100);
15160
+ var accountCreditsPeriodSchema = external_exports.enum([
15161
+ "weekly",
15162
+ "monthly",
15163
+ "five_hour",
15164
+ "seven_day",
15165
+ "unknown"
15166
+ ]);
15167
+ var accountCreditsScopeSchema = external_exports.object({
15168
+ id: external_exports.string().min(1).max(256),
15169
+ label: external_exports.string().min(1).max(256),
15170
+ localizations: harnessLocalizationsSchema.optional()
15171
+ }).strict();
15126
15172
  var accountCreditsProductUsageSchema = external_exports.object({
15127
15173
  product: external_exports.string().min(1),
15174
+ /** Native period and scope, never inferred from the display name. */
15175
+ periodType: accountCreditsPeriodSchema.optional(),
15176
+ scope: accountCreditsScopeSchema.optional(),
15177
+ localizations: harnessLocalizationsSchema.optional(),
15128
15178
  used: external_exports.number().finite().nonnegative().optional(),
15129
15179
  // Zero is a real empty cap, not an absent field.
15130
15180
  limit: external_exports.number().finite().nonnegative().optional(),
@@ -15144,9 +15194,11 @@ var accountCreditsSnapshotSchema = external_exports.object({
15144
15194
  unit: external_exports.string().min(1).max(32).optional(),
15145
15195
  /** Native label when the primary limit is scoped to a model or product group. */
15146
15196
  label: external_exports.string().min(1).optional(),
15197
+ scope: accountCreditsScopeSchema.optional(),
15198
+ localizations: harnessLocalizationsSchema.optional(),
15147
15199
  usedPercent: usagePercentSchema,
15148
15200
  resetsAt: external_exports.string().min(1).optional(),
15149
- periodType: external_exports.enum(["weekly", "monthly", "five_hour", "seven_day", "unknown"]),
15201
+ periodType: accountCreditsPeriodSchema,
15150
15202
  productUsage: external_exports.array(accountCreditsProductUsageSchema).min(1).optional(),
15151
15203
  resetCredits: accountResetCreditsSchema.optional()
15152
15204
  }).strict();
@@ -15157,7 +15209,9 @@ var threadUsageInspectionParamsSchema = external_exports.object({
15157
15209
  var threadUsageInspectionSchema = external_exports.object({
15158
15210
  threadId: hostThreadIdSchema,
15159
15211
  usage: threadUsageSnapshotSchema.nullable(),
15160
- accountCredits: accountCreditsSnapshotSchema.optional()
15212
+ accountCredits: accountCreditsSnapshotSchema.optional(),
15213
+ /** Whether this source can provide cached account quota independently of usage. */
15214
+ accountCreditsSupported: external_exports.boolean().optional()
15161
15215
  }).strict();
15162
15216
 
15163
15217
  // ../../shared-contracts/dist/harness-accounts.js
@@ -15284,7 +15338,8 @@ var harnessPermissionModeSchema = external_exports.object({
15284
15338
  id: harnessPermissionModeIdSchema,
15285
15339
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
15286
15340
  description: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_DESCRIPTION_MAX_LENGTH).optional(),
15287
- dangerous: external_exports.boolean().optional()
15341
+ dangerous: external_exports.boolean().optional(),
15342
+ localizations: harnessLocalizationsSchema.optional()
15288
15343
  }).strict();
15289
15344
  var harnessPermissionModeCatalogSchema = external_exports.object({
15290
15345
  modes: external_exports.array(harnessPermissionModeSchema).min(1).max(HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH),
@@ -15437,7 +15492,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
15437
15492
  }).strict().optional(),
15438
15493
  autonomousTurns: external_exports.object({
15439
15494
  observe: external_exports.boolean()
15440
- }).strict().optional()
15495
+ }).strict().optional(),
15496
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
15497
+ steer: external_exports.boolean().optional()
15441
15498
  }).strict();
15442
15499
  var harnessConfigurationStateSchema = external_exports.object({
15443
15500
  effectiveModel: harnessModelRefSchema.optional(),
@@ -15484,7 +15541,9 @@ var harnessInspectionSchema = external_exports.union([
15484
15541
  var harnessInspectParamsSchema = external_exports.object({
15485
15542
  harnessId: harnessIdSchema,
15486
15543
  cwd: nonBlankTextSchema2.max(16384).optional(),
15487
- refresh: external_exports.boolean().optional()
15544
+ refresh: external_exports.boolean().optional(),
15545
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
15546
+ purpose: external_exports.literal("availability").optional()
15488
15547
  }).strict();
15489
15548
  var harnessWebUiOpenParamsSchema = external_exports.object({
15490
15549
  harnessId: harnessIdSchema
@@ -15567,6 +15626,15 @@ var threadOwnershipListResultSchema = external_exports.object({
15567
15626
  seen.add(thread.threadId);
15568
15627
  }
15569
15628
  });
15629
+ var threadSteeringInspectParamsSchema = external_exports.object({
15630
+ threadId: hostThreadIdSchema,
15631
+ /** The text about to be steered; a Harness command always stops and restarts. */
15632
+ text: external_exports.string().optional()
15633
+ }).strict();
15634
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
15635
+ var threadSteeringInspectResultSchema = external_exports.object({
15636
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
15637
+ }).strict();
15570
15638
 
15571
15639
  // ../../shared-contracts/dist/harness-plugins.js
15572
15640
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -15668,11 +15736,31 @@ var harnessInstallationStateSchema = external_exports.object({
15668
15736
  latestVersion: external_exports.string().min(1).max(128),
15669
15737
  updateAvailable: external_exports.boolean(),
15670
15738
  canUpdate: external_exports.boolean(),
15739
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
15740
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
15741
+ /** Official download opened by the user; does not imply an automatic installation. */
15742
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
15671
15743
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
15672
15744
  message: external_exports.string().max(2048).optional(),
15673
15745
  messageCode: external_exports.string().min(1).max(128).optional(),
15746
+ /** Safe plugin-owned explanation, distinct from raw diagnostic message. */
15747
+ notice: harnessLocalizedTextSchema.optional(),
15674
15748
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
15675
15749
  }).strict();
15750
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
15751
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
15752
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
15753
+ external_exports.object({
15754
+ taskId: external_exports.string().uuid(),
15755
+ status: external_exports.literal("succeeded"),
15756
+ result: harnessInstallationStateSchema
15757
+ }).strict(),
15758
+ external_exports.object({
15759
+ taskId: external_exports.string().uuid(),
15760
+ status: external_exports.literal("failed"),
15761
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
15762
+ }).strict()
15763
+ ]);
15676
15764
 
15677
15765
  // ../../shared-contracts/dist/codex-accounts.js
15678
15766
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -15797,6 +15885,7 @@ var harnessCommandDescriptorSchema = external_exports.object({
15797
15885
  invocation: commandInvocationSchema,
15798
15886
  label: commandLabelSchema,
15799
15887
  description: commandDescriptionSchema.optional(),
15888
+ localizations: harnessLocalizationsSchema.optional(),
15800
15889
  argumentMode: external_exports.enum(["none", "text"]),
15801
15890
  /**
15802
15891
  * Native distinction reported by the Harness. Omitted when the Harness does
@@ -16157,6 +16246,18 @@ function sanitizeDiagnosticTail(value) {
16157
16246
  return redacted.length <= DIAGNOSTIC_TAIL_MAX_LENGTH ? redacted : redacted.slice(-DIAGNOSTIC_TAIL_MAX_LENGTH);
16158
16247
  }
16159
16248
 
16249
+ // ../../harness-adapter/dist/steer.js
16250
+ function unsupportedSteer(harnessLabel) {
16251
+ return {
16252
+ ok: false,
16253
+ error: {
16254
+ code: "unsupported",
16255
+ message: `${harnessLabel} cannot steer an active Turn natively`,
16256
+ retryable: false
16257
+ }
16258
+ };
16259
+ }
16260
+
16160
16261
  // ../../harness-adapter/dist/usage.js
16161
16262
  var tokenFields = [
16162
16263
  "inputTokens",
@@ -16184,6 +16285,7 @@ var usageFields = /* @__PURE__ */ new Set([
16184
16285
  ...safeIntegerFields,
16185
16286
  ...percentFields,
16186
16287
  "sessionCacheUsage",
16288
+ "composerIndicators",
16187
16289
  "totalCostUsd",
16188
16290
  "totalCredits",
16189
16291
  "contextUsagePercent",
@@ -16206,6 +16308,7 @@ function parseHostUsage(value) {
16206
16308
  throw new Error(`Harness Usage contains unknown field '${key}'`);
16207
16309
  }
16208
16310
  }
16311
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
16209
16312
  for (const field2 of [
16210
16313
  "totalCredits",
16211
16314
  "contextUsagePercent",
@@ -16276,9 +16379,9 @@ function parseHostUsage(value) {
16276
16379
  if (value.costSource !== "publicPrice") {
16277
16380
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
16278
16381
  }
16279
- return { ...value, unpricedModels: [...models] };
16382
+ return { ...value, ...indicators, unpricedModels: [...models] };
16280
16383
  }
16281
- return { ...value };
16384
+ return { ...value, ...indicators };
16282
16385
  }
16283
16386
  var requestTokenFields = [
16284
16387
  "inputTokens",
@@ -16716,6 +16819,10 @@ function createZcodeInstallation(environment, app) {
16716
16819
  updateAvailable: false,
16717
16820
  canUpdate: false,
16718
16821
  messageCode: "zcode-desktop-updater",
16822
+ notice: {
16823
+ en: "The CLI ships inside ZCode Desktop. Update ZCode Desktop itself to update it.",
16824
+ "zh-CN": "CLI 随 ZCode Desktop 一起发布,请直接更新 ZCode Desktop。"
16825
+ },
16719
16826
  message: "The CLI ships inside ZCode Desktop. Update ZCode Desktop itself to update it."
16720
16827
  };
16721
16828
  };
@@ -18180,11 +18287,19 @@ var modeLabels = {
18180
18287
  yolo: "Full access",
18181
18288
  auto: "Auto"
18182
18289
  };
18290
+ var chineseModeLabels = {
18291
+ build: "确认变更",
18292
+ edit: "自动编辑",
18293
+ plan: "规划模式",
18294
+ yolo: "完全访问",
18295
+ auto: "自动"
18296
+ };
18183
18297
  function permissionModes(current = "build") {
18184
18298
  return harnessPermissionModeCatalogSchema.parse({
18185
18299
  modes: Object.entries(modeLabels).map(([id, label]) => ({
18186
18300
  id,
18187
18301
  label,
18302
+ localizations: { "zh-CN": { label: chineseModeLabels[id] } },
18188
18303
  ...id === "yolo" ? { dangerous: true } : {}
18189
18304
  })),
18190
18305
  defaultModeId: current
@@ -19224,6 +19339,7 @@ var COMMAND_CATALOG = harnessCommandCatalogSchema.parse({
19224
19339
  {
19225
19340
  id: "compact",
19226
19341
  invocation: "/compact",
19342
+ localizations: { "zh-CN": { label: "压缩上下文", description: "压缩当前对话上下文" } },
19227
19343
  label: "Compact",
19228
19344
  description: "Compact the native ZCode conversation.",
19229
19345
  argumentMode: "text"
@@ -19373,6 +19489,7 @@ async function readHistory(transport, snapshot, events = []) {
19373
19489
 
19374
19490
  // dist/capabilities.js
19375
19491
  var ZCODE_CAPABILITIES = {
19492
+ steer: false,
19376
19493
  configuration: {
19377
19494
  selectModel: true,
19378
19495
  selectThinkingOption: true,
@@ -19547,6 +19664,8 @@ var ZcodeSession = class {
19547
19664
  if (this.#closed || this.#faulted)
19548
19665
  return failure("invalidState", "ZCode session is closed");
19549
19666
  try {
19667
+ if (command.type === "turn.steer")
19668
+ return unsupportedSteer("ZCode");
19550
19669
  if (command.type === "turn.start") {
19551
19670
  if (!hostTurnIdSchema.safeParse(command.turnId).success || !command.input.length || command.input.some((item) => item.type !== "text") || !command.input.some((item) => item.text.trim()))
19552
19671
  return failure("invalidRequest", "ZCode requires nonempty text and a turn ID");