@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
@@ -15623,10 +15623,10 @@ var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
15623
15623
  const shape = def.shape;
15624
15624
  const propValues = {};
15625
15625
  for (const key in shape) {
15626
- const field = shape[key]._zod;
15627
- if (field.values) {
15626
+ const field2 = shape[key]._zod;
15627
+ if (field2.values) {
15628
15628
  propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
15629
- for (const v3 of field.values)
15629
+ for (const v3 of field2.values)
15630
15630
  propValues[key].add(v3);
15631
15631
  }
15632
15632
  }
@@ -27245,10 +27245,19 @@ var model = external_exports.string().min(1).max(512);
27245
27245
  var project = external_exports.string().min(1).max(4096);
27246
27246
  var usageStatisticsParamsSchema = external_exports.strictObject({
27247
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(),
27248
27257
  harness: harness.optional(),
27249
27258
  model: model.nullable().optional(),
27250
27259
  project: project.nullable().optional(),
27251
- /** One local date inside the range. */
27260
+ /** One date in the query timezone inside the range. */
27252
27261
  date: localDate.optional()
27253
27262
  });
27254
27263
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -27284,7 +27293,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
27284
27293
  });
27285
27294
  var usageStatisticsResultSchema = external_exports.strictObject({
27286
27295
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
27287
- /** 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. */
27288
27297
  from: localDate.nullable(),
27289
27298
  to: localDate,
27290
27299
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -27324,7 +27333,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
27324
27333
  totals: usageStatisticsTotalsSchema,
27325
27334
  /** Each date and Harness of the range: every filter except the day. */
27326
27335
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
27327
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
27336
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
27328
27337
  hourly: external_exports.array(external_exports.strictObject({
27329
27338
  weekday: external_exports.number().int().min(0).max(6),
27330
27339
  hour: external_exports.number().int().min(0).max(23),
@@ -27364,6 +27373,51 @@ var hostInteractionIdSchema = opaqueIdSchema.brand();
27364
27373
  var threadPrewarmDiscardParamsSchema = external_exports.object({ threadId: hostThreadIdSchema });
27365
27374
  var threadPrewarmDiscardResultSchema = external_exports.object({ discarded: external_exports.boolean() });
27366
27375
 
27376
+ // ../../shared-contracts/dist/thread-questions.js
27377
+ var field = external_exports.discriminatedUnion("type", [
27378
+ external_exports.object({
27379
+ id: external_exports.string().min(1),
27380
+ type: external_exports.literal("choice"),
27381
+ prompt: external_exports.string(),
27382
+ options: external_exports.array(external_exports.object({
27383
+ value: external_exports.string().min(1),
27384
+ label: external_exports.string(),
27385
+ description: external_exports.string().optional()
27386
+ })).min(1),
27387
+ multiple: external_exports.boolean(),
27388
+ allowOther: external_exports.boolean(),
27389
+ optional: external_exports.boolean()
27390
+ }),
27391
+ external_exports.object({
27392
+ id: external_exports.string().min(1),
27393
+ type: external_exports.literal("text"),
27394
+ prompt: external_exports.string(),
27395
+ multiline: external_exports.boolean(),
27396
+ secret: external_exports.literal(false),
27397
+ optional: external_exports.boolean(),
27398
+ placeholder: external_exports.string().optional(),
27399
+ prefill: external_exports.string().optional()
27400
+ })
27401
+ ]);
27402
+ var threadQuestionSchema = external_exports.object({
27403
+ interactionId: external_exports.string().min(1),
27404
+ turnId: external_exports.string().min(1),
27405
+ title: external_exports.string().optional(),
27406
+ questions: external_exports.array(field).min(1)
27407
+ }).refine(({ questions }) => questions.some((q3) => q3.type === "choice" && q3.multiple), {
27408
+ message: "Shared cards require at least one multi-select question"
27409
+ });
27410
+ var threadQuestionsListParamsSchema = external_exports.strictObject({ threadId: external_exports.string().min(1) });
27411
+ var threadQuestionsResultSchema = external_exports.object({ questions: external_exports.array(threadQuestionSchema) });
27412
+ var threadQuestionRespondParamsSchema = external_exports.strictObject({
27413
+ threadId: external_exports.string().min(1),
27414
+ turnId: external_exports.string().min(1),
27415
+ interactionId: external_exports.string().min(1),
27416
+ answers: external_exports.record(external_exports.string(), external_exports.array(external_exports.string())),
27417
+ cancelled: external_exports.boolean().default(false)
27418
+ });
27419
+ var threadQuestionRespondResultSchema = external_exports.object({ accepted: external_exports.literal(true) });
27420
+
27367
27421
  // ../../shared-contracts/dist/console.js
27368
27422
  var consoleAnnouncementSchema = external_exports.strictObject({
27369
27423
  title: external_exports.string().trim().min(1).max(200),
@@ -27384,6 +27438,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
27384
27438
  "codexhost/harness/display-settings/set",
27385
27439
  "codexhost/harness/inspect",
27386
27440
  "codexhost/harness/installation",
27441
+ "codexhost/harness/installation/start",
27442
+ "codexhost/harness/installation/status",
27387
27443
  "codexhost/harness/launch-settings/get",
27388
27444
  "codexhost/harness/launch-settings/set",
27389
27445
  "codexhost/harness/web-ui/open",
@@ -27459,7 +27515,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
27459
27515
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
27460
27516
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
27461
27517
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
27518
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
27519
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
27520
+ kind: external_exports.literal("countdown"),
27521
+ id: external_exports.string().min(1).max(64),
27522
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
27523
+ label: indicatorTextSchema(256).optional(),
27524
+ tooltip: indicatorTextSchema(1024).optional()
27525
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
27526
+ message: "Composer indicator IDs must be unique"
27527
+ });
27462
27528
  var threadUsageSnapshotSchema = external_exports.object({
27529
+ composerIndicators: composerIndicatorsSchema.optional(),
27463
27530
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
27464
27531
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
27465
27532
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -27867,7 +27934,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
27867
27934
  }).strict().optional(),
27868
27935
  autonomousTurns: external_exports.object({
27869
27936
  observe: external_exports.boolean()
27870
- }).strict().optional()
27937
+ }).strict().optional(),
27938
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
27939
+ steer: external_exports.boolean().optional()
27871
27940
  }).strict();
27872
27941
  var harnessConfigurationStateSchema = external_exports.object({
27873
27942
  effectiveModel: harnessModelRefSchema.optional(),
@@ -27914,7 +27983,9 @@ var harnessInspectionSchema = external_exports.union([
27914
27983
  var harnessInspectParamsSchema = external_exports.object({
27915
27984
  harnessId: harnessIdSchema,
27916
27985
  cwd: nonBlankTextSchema2.max(16384).optional(),
27917
- refresh: external_exports.boolean().optional()
27986
+ refresh: external_exports.boolean().optional(),
27987
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
27988
+ purpose: external_exports.literal("availability").optional()
27918
27989
  }).strict();
27919
27990
  var harnessWebUiOpenParamsSchema = external_exports.object({
27920
27991
  harnessId: harnessIdSchema
@@ -27997,6 +28068,15 @@ var threadOwnershipListResultSchema = external_exports.object({
27997
28068
  seen.add(thread.threadId);
27998
28069
  }
27999
28070
  });
28071
+ var threadSteeringInspectParamsSchema = external_exports.object({
28072
+ threadId: hostThreadIdSchema,
28073
+ /** The text about to be steered; a Harness command always stops and restarts. */
28074
+ text: external_exports.string().optional()
28075
+ }).strict();
28076
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
28077
+ var threadSteeringInspectResultSchema = external_exports.object({
28078
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
28079
+ }).strict();
28000
28080
 
28001
28081
  // ../../shared-contracts/dist/harness-plugins.js
28002
28082
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -28098,6 +28178,10 @@ var harnessInstallationStateSchema = external_exports.object({
28098
28178
  latestVersion: external_exports.string().min(1).max(128),
28099
28179
  updateAvailable: external_exports.boolean(),
28100
28180
  canUpdate: external_exports.boolean(),
28181
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
28182
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
28183
+ /** Official download opened by the user; does not imply an automatic installation. */
28184
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
28101
28185
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
28102
28186
  message: external_exports.string().max(2048).optional(),
28103
28187
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -28105,6 +28189,20 @@ var harnessInstallationStateSchema = external_exports.object({
28105
28189
  notice: harnessLocalizedTextSchema.optional(),
28106
28190
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
28107
28191
  }).strict();
28192
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
28193
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
28194
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
28195
+ external_exports.object({
28196
+ taskId: external_exports.string().uuid(),
28197
+ status: external_exports.literal("succeeded"),
28198
+ result: harnessInstallationStateSchema
28199
+ }).strict(),
28200
+ external_exports.object({
28201
+ taskId: external_exports.string().uuid(),
28202
+ status: external_exports.literal("failed"),
28203
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
28204
+ }).strict()
28205
+ ]);
28108
28206
 
28109
28207
  // ../../shared-contracts/dist/codex-accounts.js
28110
28208
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -29263,6 +29361,18 @@ var HarnessOutputChannel = class {
29263
29361
  }
29264
29362
  };
29265
29363
 
29364
+ // ../../harness-adapter/dist/steer.js
29365
+ function unsupportedSteer(harnessLabel) {
29366
+ return {
29367
+ ok: false,
29368
+ error: {
29369
+ code: "unsupported",
29370
+ message: `${harnessLabel} cannot steer an active Turn natively`,
29371
+ retryable: false
29372
+ }
29373
+ };
29374
+ }
29375
+
29266
29376
  // ../../harness-adapter/dist/usage.js
29267
29377
  var tokenFields = [
29268
29378
  "inputTokens",
@@ -29290,6 +29400,7 @@ var usageFields = /* @__PURE__ */ new Set([
29290
29400
  ...safeIntegerFields,
29291
29401
  ...percentFields,
29292
29402
  "sessionCacheUsage",
29403
+ "composerIndicators",
29293
29404
  "totalCostUsd",
29294
29405
  "totalCredits",
29295
29406
  "contextUsagePercent",
@@ -29312,26 +29423,27 @@ function parseHostUsage(value) {
29312
29423
  throw new Error(`Harness Usage contains unknown field '${key}'`);
29313
29424
  }
29314
29425
  }
29315
- for (const field of [
29426
+ const indicators = value.composerIndicators === void 0 ? {} : { composerIndicators: composerIndicatorsSchema.parse(value.composerIndicators) };
29427
+ for (const field2 of [
29316
29428
  "totalCredits",
29317
29429
  "contextUsagePercent",
29318
29430
  "apiOutputTokensPerSecond"
29319
29431
  ]) {
29320
- const candidate = value[field];
29432
+ const candidate = value[field2];
29321
29433
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
29322
- throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
29434
+ throw new Error(`Harness Usage '${field2}' must be a finite non-negative number`);
29323
29435
  }
29324
29436
  }
29325
- for (const field of tokenFields) {
29326
- const candidate = value[field];
29437
+ for (const field2 of tokenFields) {
29438
+ const candidate = value[field2];
29327
29439
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29328
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29440
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
29329
29441
  }
29330
29442
  }
29331
- for (const field of safeIntegerFields) {
29332
- const candidate = value[field];
29443
+ for (const field2 of safeIntegerFields) {
29444
+ const candidate = value[field2];
29333
29445
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
29334
- throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
29446
+ throw new Error(`Harness Usage '${field2}' must be a non-negative safe integer`);
29335
29447
  }
29336
29448
  }
29337
29449
  if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
@@ -29340,10 +29452,10 @@ function parseHostUsage(value) {
29340
29452
  if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
29341
29453
  throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
29342
29454
  }
29343
- for (const field of percentFields) {
29344
- const candidate = value[field];
29455
+ for (const field2 of percentFields) {
29456
+ const candidate = value[field2];
29345
29457
  if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
29346
- throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
29458
+ throw new Error(`Harness Usage '${field2}' must be between 0 and 100`);
29347
29459
  }
29348
29460
  }
29349
29461
  if (value.sessionCacheUsage !== void 0) {
@@ -29382,9 +29494,9 @@ function parseHostUsage(value) {
29382
29494
  if (value.costSource !== "publicPrice") {
29383
29495
  throw new Error("Harness Usage 'unpricedModels' must be provided with a 'publicPrice' cost");
29384
29496
  }
29385
- return { ...value, unpricedModels: [...models] };
29497
+ return { ...value, ...indicators, unpricedModels: [...models] };
29386
29498
  }
29387
- return { ...value };
29499
+ return { ...value, ...indicators };
29388
29500
  }
29389
29501
  var requestTokenFields = [
29390
29502
  "inputTokens",
@@ -39162,11 +39274,11 @@ var McpServer = class {
39162
39274
  return EMPTY_COMPLETION_RESULT;
39163
39275
  }
39164
39276
  const promptShape = getObjectShape(prompt.argsSchema);
39165
- const field = promptShape?.[request.params.argument.name];
39166
- if (!isCompletable(field)) {
39277
+ const field2 = promptShape?.[request.params.argument.name];
39278
+ if (!isCompletable(field2)) {
39167
39279
  return EMPTY_COMPLETION_RESULT;
39168
39280
  }
39169
- const completer = getCompleter(field);
39281
+ const completer = getCompleter(field2);
39170
39282
  if (!completer) {
39171
39283
  return EMPTY_COMPLETION_RESULT;
39172
39284
  }
@@ -39439,8 +39551,8 @@ var McpServer = class {
39439
39551
  };
39440
39552
  this._registeredPrompts[name] = registeredPrompt;
39441
39553
  if (argsSchema) {
39442
- const hasCompletable = Object.values(argsSchema).some((field) => {
39443
- const inner = field instanceof ZodOptional ? field._def?.innerType : field;
39554
+ const hasCompletable = Object.values(argsSchema).some((field2) => {
39555
+ const inner = field2 instanceof ZodOptional ? field2._def?.innerType : field2;
39444
39556
  return isCompletable(inner);
39445
39557
  });
39446
39558
  if (hasCompletable) {
@@ -39649,9 +39761,9 @@ function promptArgumentsFromSchema(schema) {
39649
39761
  const shape = getObjectShape(schema);
39650
39762
  if (!shape)
39651
39763
  return [];
39652
- return Object.entries(shape).map(([name, field]) => {
39653
- const description = getSchemaDescription(field);
39654
- const isOptional = isSchemaOptional(field);
39764
+ return Object.entries(shape).map(([name, field2]) => {
39765
+ const description = getSchemaDescription(field2);
39766
+ const isOptional = isSchemaOptional(field2);
39655
39767
  return {
39656
39768
  name,
39657
39769
  description,
@@ -52272,6 +52384,8 @@ var QoderSession = class {
52272
52384
  };
52273
52385
  }
52274
52386
  switch (command.type) {
52387
+ case "turn.steer":
52388
+ return unsupportedSteer("Qoder");
52275
52389
  case "turn.start": {
52276
52390
  if (this.#activeTurn) {
52277
52391
  return {
@@ -52982,10 +53096,13 @@ function usageSessionTitle(value) {
52982
53096
  return void 0;
52983
53097
  if (normalized.length <= MAX_SESSION_TITLE_LENGTH)
52984
53098
  return normalized;
52985
- const characters = [...normalized];
52986
- if (characters.length <= MAX_SESSION_TITLE_LENGTH)
52987
- return normalized;
52988
- return `${characters.slice(0, MAX_SESSION_TITLE_LENGTH - 1).join("").trimEnd()}…`;
53099
+ let title = "";
53100
+ for (const character of normalized) {
53101
+ if (title.length + character.length >= MAX_SESSION_TITLE_LENGTH)
53102
+ break;
53103
+ title += character;
53104
+ }
53105
+ return `${title.trimEnd()}…`;
52989
53106
  }
52990
53107
  function sessionIdOk(value) {
52991
53108
  return typeof value === "string" && value.length > 0 && value.length <= MAX_SESSION_ID_LENGTH;
@@ -53022,13 +53139,13 @@ function parseHarnessUsageEntry(value) {
53022
53139
  }
53023
53140
  if (!tokenCount(entry.inputTokens) || !tokenCount(entry.outputTokens))
53024
53141
  return null;
53025
- for (const field of [
53142
+ for (const field2 of [
53026
53143
  "cachedInputTokens",
53027
53144
  "cacheWriteInputTokens",
53028
53145
  "cacheWrite1hInputTokens",
53029
53146
  "reasoningOutputTokens"
53030
53147
  ]) {
53031
- if (entry[field] !== void 0 && !tokenCount(entry[field]))
53148
+ if (entry[field2] !== void 0 && !tokenCount(entry[field2]))
53032
53149
  return null;
53033
53150
  }
53034
53151
  const cached2 = entry.cachedInputTokens ?? 0;