@codexhost/cli-win32-arm64 0.13.3 → 0.15.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 +109 -11
  4. package/app/console-web.js +649 -132
  5. package/app/desktop-controller.mjs +120 -12
  6. package/app/host-runtime.mjs +1124 -293
  7. package/app/plugins/antigravity/plugin.mjs +431 -66
  8. package/app/plugins/claude-code/plugin.mjs +761 -139
  9. package/app/plugins/codebuddy/plugin.mjs +322 -68
  10. package/app/plugins/codex-usage/plugin.mjs +249 -102
  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 +34591 -0
  14. package/app/plugins/cursor-cli/plugin.mjs +21011 -44970
  15. package/app/plugins/deepseek-harness/plugin.mjs +160 -43
  16. package/app/plugins/enabled.json +1 -0
  17. package/app/plugins/grok/plugin.mjs +565 -107
  18. package/app/plugins/hermes/plugin.mjs +128 -12
  19. package/app/plugins/kimi-code/plugin.mjs +136 -22
  20. package/app/plugins/kiro-cli/plugin.mjs +136 -22
  21. package/app/plugins/omp/plugin.mjs +2236 -2036
  22. package/app/plugins/opencode/plugin.mjs +187 -68
  23. package/app/plugins/pi/plugin.mjs +2621 -2304
  24. package/app/plugins/qoder/plugin.mjs +153 -36
  25. package/app/plugins/qoder-cn/plugin.mjs +153 -36
  26. package/app/plugins/workbuddy/plugin.mjs +583 -92
  27. package/app/plugins/zcode/plugin.mjs +183 -40
  28. package/app/renderer-extension.js +1758 -392
  29. package/bin/codexhost.exe +0 -0
  30. package/libexec/codexhost-node-repl.exe +0 -0
  31. package/libexec/codexhost-shim.exe +0 -0
  32. package/libexec/codexhost-updater.exe +0 -0
  33. package/package.json +1 -1
@@ -16026,10 +16026,10 @@ var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
16026
16026
  const shape = def.shape;
16027
16027
  const propValues = {};
16028
16028
  for (const key in shape) {
16029
- const field = shape[key]._zod;
16030
- if (field.values) {
16029
+ const field2 = shape[key]._zod;
16030
+ if (field2.values) {
16031
16031
  propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
16032
- for (const v3 of field.values)
16032
+ for (const v3 of field2.values)
16033
16033
  propValues[key].add(v3);
16034
16034
  }
16035
16035
  }
@@ -27648,10 +27648,19 @@ var model = external_exports.string().min(1).max(512);
27648
27648
  var project = external_exports.string().min(1).max(4096);
27649
27649
  var usageStatisticsParamsSchema = external_exports.strictObject({
27650
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(),
27651
27660
  harness: harness.optional(),
27652
27661
  model: model.nullable().optional(),
27653
27662
  project: project.nullable().optional(),
27654
- /** One local date inside the range. */
27663
+ /** One date in the query timezone inside the range. */
27655
27664
  date: localDate.optional()
27656
27665
  });
27657
27666
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27687,7 +27696,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27687
27696
  });
27688
27697
  var usageStatisticsResultSchema = external_exports.strictObject({
27689
27698
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27690
- /** 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. */
27691
27700
  from: localDate.nullable(),
27692
27701
  to: localDate,
27693
27702
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27727,7 +27736,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27727
27736
  totals: usageStatisticsTotalsSchema,
27728
27737
  /** Each date and Harness of the range: every filter except the day. */
27729
27738
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27730
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27739
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27731
27740
  hourly: external_exports.array(external_exports.strictObject({
27732
27741
  weekday: external_exports.number().int().min(0).max(6),
27733
27742
  hour: external_exports.number().int().min(0).max(23),
@@ -27767,6 +27776,51 @@ var hostInteractionIdSchema = opaqueIdSchema.brand();
27767
27776
  var threadPrewarmDiscardParamsSchema = external_exports.object({ threadId: hostThreadIdSchema });
27768
27777
  var threadPrewarmDiscardResultSchema = external_exports.object({ discarded: external_exports.boolean() });
27769
27778
 
27779
+ // ../../shared-contracts/dist/thread-questions.js
27780
+ var field = external_exports.discriminatedUnion("type", [
27781
+ external_exports.object({
27782
+ id: external_exports.string().min(1),
27783
+ type: external_exports.literal("choice"),
27784
+ prompt: external_exports.string(),
27785
+ options: external_exports.array(external_exports.object({
27786
+ value: external_exports.string().min(1),
27787
+ label: external_exports.string(),
27788
+ description: external_exports.string().optional()
27789
+ })).min(1),
27790
+ multiple: external_exports.boolean(),
27791
+ allowOther: external_exports.boolean(),
27792
+ optional: external_exports.boolean()
27793
+ }),
27794
+ external_exports.object({
27795
+ id: external_exports.string().min(1),
27796
+ type: external_exports.literal("text"),
27797
+ prompt: external_exports.string(),
27798
+ multiline: external_exports.boolean(),
27799
+ secret: external_exports.literal(false),
27800
+ optional: external_exports.boolean(),
27801
+ placeholder: external_exports.string().optional(),
27802
+ prefill: external_exports.string().optional()
27803
+ })
27804
+ ]);
27805
+ var threadQuestionSchema = external_exports.object({
27806
+ interactionId: external_exports.string().min(1),
27807
+ turnId: external_exports.string().min(1),
27808
+ title: external_exports.string().optional(),
27809
+ questions: external_exports.array(field).min(1)
27810
+ }).refine(({ questions }) => questions.some((q3) => q3.type === "choice" && q3.multiple), {
27811
+ message: "Shared cards require at least one multi-select question"
27812
+ });
27813
+ var threadQuestionsListParamsSchema = external_exports.strictObject({ threadId: external_exports.string().min(1) });
27814
+ var threadQuestionsResultSchema = external_exports.object({ questions: external_exports.array(threadQuestionSchema) });
27815
+ var threadQuestionRespondParamsSchema = external_exports.strictObject({
27816
+ threadId: external_exports.string().min(1),
27817
+ turnId: external_exports.string().min(1),
27818
+ interactionId: external_exports.string().min(1),
27819
+ answers: external_exports.record(external_exports.string(), external_exports.array(external_exports.string())),
27820
+ cancelled: external_exports.boolean().default(false)
27821
+ });
27822
+ var threadQuestionRespondResultSchema = external_exports.object({ accepted: external_exports.literal(true) });
27823
+
27770
27824
  // ../../shared-contracts/dist/console.js
27771
27825
  var consoleAnnouncementSchema = external_exports.strictObject({
27772
27826
  title: external_exports.string().trim().min(1).max(200),
@@ -27787,6 +27841,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27787
27841
  "codexhost/harness/display-settings/set",
27788
27842
  "codexhost/harness/inspect",
27789
27843
  "codexhost/harness/installation",
27844
+ "codexhost/harness/installation/start",
27845
+ "codexhost/harness/installation/status",
27790
27846
  "codexhost/harness/launch-settings/get",
27791
27847
  "codexhost/harness/launch-settings/set",
27792
27848
  "codexhost/harness/web-ui/open",
@@ -27862,7 +27918,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27862
27918
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27863
27919
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27864
27920
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27921
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27922
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27923
+ kind: external_exports.literal("countdown"),
27924
+ id: external_exports.string().min(1).max(64),
27925
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27926
+ label: indicatorTextSchema(256).optional(),
27927
+ tooltip: indicatorTextSchema(1024).optional()
27928
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27929
+ message: "Composer indicator IDs must be unique"
27930
+ });
27865
27931
  var threadUsageSnapshotSchema = external_exports.object({
27932
+ composerIndicators: composerIndicatorsSchema.optional(),
27866
27933
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27867
27934
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27868
27935
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -28270,7 +28337,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
28270
28337
  }).strict().optional(),
28271
28338
  autonomousTurns: external_exports.object({
28272
28339
  observe: external_exports.boolean()
28273
- }).strict().optional()
28340
+ }).strict().optional(),
28341
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
28342
+ steer: external_exports.boolean().optional()
28274
28343
  }).strict();
28275
28344
  var harnessConfigurationStateSchema = external_exports.object({
28276
28345
  effectiveModel: harnessModelRefSchema.optional(),
@@ -28317,7 +28386,9 @@ var harnessInspectionSchema = external_exports.union([
28317
28386
  var harnessInspectParamsSchema = external_exports.object({
28318
28387
  harnessId: harnessIdSchema,
28319
28388
  cwd: nonBlankTextSchema2.max(16384).optional(),
28320
- refresh: external_exports.boolean().optional()
28389
+ refresh: external_exports.boolean().optional(),
28390
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
28391
+ purpose: external_exports.literal("availability").optional()
28321
28392
  }).strict();
28322
28393
  var harnessWebUiOpenParamsSchema = external_exports.object({
28323
28394
  harnessId: harnessIdSchema
@@ -28400,6 +28471,15 @@ var threadOwnershipListResultSchema = external_exports.object({
28400
28471
  seen.add(thread.threadId);
28401
28472
  }
28402
28473
  });
28474
+ var threadSteeringInspectParamsSchema = external_exports.object({
28475
+ threadId: hostThreadIdSchema,
28476
+ /** The text about to be steered; a Harness command always stops and restarts. */
28477
+ text: external_exports.string().optional()
28478
+ }).strict();
28479
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28480
+ var threadSteeringInspectResultSchema = external_exports.object({
28481
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28482
+ }).strict();
28403
28483
 
28404
28484
  // ../../shared-contracts/dist/harness-plugins.js
28405
28485
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28501,6 +28581,10 @@ var harnessInstallationStateSchema = external_exports.object({
28501
28581
  latestVersion: external_exports.string().min(1).max(128),
28502
28582
  updateAvailable: external_exports.boolean(),
28503
28583
  canUpdate: external_exports.boolean(),
28584
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28585
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28586
+ /** Official download opened by the user; does not imply an automatic installation. */
28587
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28504
28588
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28505
28589
  message: external_exports.string().max(2048).optional(),
28506
28590
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -28508,6 +28592,20 @@ var harnessInstallationStateSchema = external_exports.object({
28508
28592
  notice: harnessLocalizedTextSchema.optional(),
28509
28593
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28510
28594
  }).strict();
28595
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28596
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28597
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28598
+ external_exports.object({
28599
+ taskId: external_exports.string().uuid(),
28600
+ status: external_exports.literal("succeeded"),
28601
+ result: harnessInstallationStateSchema
28602
+ }).strict(),
28603
+ external_exports.object({
28604
+ taskId: external_exports.string().uuid(),
28605
+ status: external_exports.literal("failed"),
28606
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28607
+ }).strict()
28608
+ ]);
28511
28609
 
28512
28610
  // ../../shared-contracts/dist/codex-accounts.js
28513
28611
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -29261,6 +29359,18 @@ var HarnessOutputChannel = class {
29261
29359
  }
29262
29360
  };
29263
29361
 
29362
+ // ../../harness-adapter/dist/steer.js
29363
+ function unsupportedSteer(harnessLabel) {
29364
+ return {
29365
+ ok: false,
29366
+ error: {
29367
+ code: "unsupported",
29368
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29369
+ retryable: false
29370
+ }
29371
+ };
29372
+ }
29373
+
29264
29374
  // ../../harness-adapter/dist/usage.js
29265
29375
  var tokenFields = [
29266
29376
  "inputTokens",
@@ -29288,6 +29398,7 @@ var usageFields = /* @__PURE__ */ new Set([
29288
29398
  ...safeIntegerFields,
29289
29399
  ...percentFields,
29290
29400
  "sessionCacheUsage",
29401
+ "composerIndicators",
29291
29402
  "totalCostUsd",
29292
29403
  "totalCredits",
29293
29404
  "contextUsagePercent",
@@ -29310,26 +29421,27 @@ function parseHostUsage(value) {
29310
29421
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29311
29422
  }
29312
29423
  }
29313
- for (const field of [
29424
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29425
+ for (const field2 of [
29314
29426
  "totalCredits",
29315
29427
  "contextUsagePercent",
29316
29428
  "apiOutputTokensPerSecond"
29317
29429
  ]) {
29318
- const candidate = value[field];
29430
+ const candidate = value[field2];
29319
29431
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
29320
- throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
29432
+ throw new Error(`Harness Usage '${field2}' must be a finite non-negative number`);
29321
29433
  }
29322
29434
  }
29323
- for (const field of tokenFields) {
29324
- const candidate = value[field];
29435
+ for (const field2 of tokenFields) {
29436
+ const candidate = value[field2];
29325
29437
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29326
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29438
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
29327
29439
  }
29328
29440
  }
29329
- for (const field of safeIntegerFields) {
29330
- const candidate = value[field];
29441
+ for (const field2 of safeIntegerFields) {
29442
+ const candidate = value[field2];
29331
29443
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29332
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29444
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
29333
29445
  }
29334
29446
  }
29335
29447
  if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
@@ -29338,10 +29450,10 @@ function parseHostUsage(value) {
29338
29450
  if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
29339
29451
  throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
29340
29452
  }
29341
- for (const field of percentFields) {
29342
- const candidate = value[field];
29453
+ for (const field2 of percentFields) {
29454
+ const candidate = value[field2];
29343
29455
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
29344
- throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
29456
+ throw new Error(`Harness Usage '${field2}' must be between 0 and 100`);
29345
29457
  }
29346
29458
  }
29347
29459
  if (value.sessionCacheUsage !== void 0) {
@@ -29380,9 +29492,9 @@ function parseHostUsage(value) {
29380
29492
  if (value.costSource !== "publicPrice") {
29381
29493
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29382
29494
  }
29383
- return { ...value, unpricedModels: [...models] };
29495
+ return { ...value, ...indicators, unpricedModels: [...models] };
29384
29496
  }
29385
- return { ...value };
29497
+ return { ...value, ...indicators };
29386
29498
  }
29387
29499
  var requestTokenFields = [
29388
29500
  "inputTokens",
@@ -39160,11 +39272,11 @@ var McpServer = class {
39160
39272
  return EMPTY_COMPLETION_RESULT;
39161
39273
  }
39162
39274
  const promptShape = getObjectShape(prompt.argsSchema);
39163
- const field = promptShape?.[request.params.argument.name];
39164
- if (!isCompletable(field)) {
39275
+ const field2 = promptShape?.[request.params.argument.name];
39276
+ if (!isCompletable(field2)) {
39165
39277
  return EMPTY_COMPLETION_RESULT;
39166
39278
  }
39167
- const completer = getCompleter(field);
39279
+ const completer = getCompleter(field2);
39168
39280
  if (!completer) {
39169
39281
  return EMPTY_COMPLETION_RESULT;
39170
39282
  }
@@ -39437,8 +39549,8 @@ var McpServer = class {
39437
39549
  };
39438
39550
  this._registeredPrompts[name] = registeredPrompt;
39439
39551
  if (argsSchema) {
39440
- const hasCompletable = Object.values(argsSchema).some((field) => {
39441
- const inner = field instanceof ZodOptional ? field._def?.innerType : field;
39552
+ const hasCompletable = Object.values(argsSchema).some((field2) => {
39553
+ const inner = field2 instanceof ZodOptional ? field2._def?.innerType : field2;
39442
39554
  return isCompletable(inner);
39443
39555
  });
39444
39556
  if (hasCompletable) {
@@ -39647,9 +39759,9 @@ function promptArgumentsFromSchema(schema) {
39647
39759
  const shape = getObjectShape(schema);
39648
39760
  if (!shape)
39649
39761
  return [];
39650
- return Object.entries(shape).map(([name, field]) => {
39651
- const description = getSchemaDescription(field);
39652
- const isOptional = isSchemaOptional(field);
39762
+ return Object.entries(shape).map(([name, field2]) => {
39763
+ const description = getSchemaDescription(field2);
39764
+ const isOptional = isSchemaOptional(field2);
39653
39765
  return {
39654
39766
  name,
39655
39767
  description,
@@ -52270,6 +52382,8 @@ var QoderSession = class {
52270
52382
  };
52271
52383
  }
52272
52384
  switch (command.type) {
52385
+ case "turn.steer":
52386
+ return unsupportedSteer("Qoder");
52273
52387
  case "turn.start": {
52274
52388
  if (this.#activeTurn) {
52275
52389
  return {
@@ -52980,10 +53094,13 @@ function usageSessionTitle(value) {
52980
53094
  return void 0;
52981
53095
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
52982
53096
  return normalized;
52983
- const characters = [...normalized];
52984
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
52985
- return normalized;
52986
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53097
+ let title = "";
53098
+ for (const character of normalized) {
53099
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53100
+ break;
53101
+ title += character;
53102
+ }
53103
+ return `${title.trimEnd()}…`;
52987
53104
  }
52988
53105
  function sessionIdOk(value) {
52989
53106
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -53020,13 +53137,13 @@ function parseHarnessUsageEntry(value) {
53020
53137
  }
53021
53138
  if (!tokenCount(entry.inputTokens) || !tokenCount(entry.outputTokens))
53022
53139
  return null;
53023
- for (const field of [
53140
+ for (const field2 of [
53024
53141
  "cachedInputTokens",
53025
53142
  "cacheWriteInputTokens",
53026
53143
  "cacheWrite1hInputTokens",
53027
53144
  "reasoningOutputTokens"
53028
53145
  ]) {
53029
- if (entry[field] !== void 0 && !tokenCount(entry[field]))
53146
+ if (entry[field2] !== void 0 && !tokenCount(entry[field2]))
53030
53147
  return null;
53031
53148
  }
53032
53149
  const cached2 = entry.cachedInputTokens ?? 0;