@codexhost/cli-darwin-x64 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.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Run Pi and Claude Code as first-class external harnesses inside Codex Desktop.
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- npm install -g @codexhost/cli@0.13.3
10
+ npm install -g @codexhost/cli@0.15.0
11
11
  ```
12
12
 
13
13
  Do not install this package directly. npm selects it through the optional dependencies of `@codexhost/cli`.
@@ -1 +1 @@
1
- {"schemaVersion":1,"version":"0.13.3","distribution":"npm","target":"macos-x64"}
1
+ {"schemaVersion":1,"version":"0.15.0","distribution":"npm","target":"macos-x64"}
@@ -3925,10 +3925,10 @@ var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
3925
3925
  const shape = def.shape;
3926
3926
  const propValues = {};
3927
3927
  for (const key in shape) {
3928
- const field = shape[key]._zod;
3929
- if (field.values) {
3928
+ const field2 = shape[key]._zod;
3929
+ if (field2.values) {
3930
3930
  propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
3931
- for (const v of field.values)
3931
+ for (const v of field2.values)
3932
3932
  propValues[key].add(v);
3933
3933
  }
3934
3934
  }
@@ -15547,10 +15547,19 @@ var model = external_exports.string().min(1).max(512);
15547
15547
  var project = external_exports.string().min(1).max(4096);
15548
15548
  var usageStatisticsParamsSchema = external_exports.strictObject({
15549
15549
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15550
+ /** Display timezone for ranges, dates and hourly buckets; omitted means the Host's local zone. */
15551
+ timeZone: external_exports.string().min(1).max(128).refine((value) => {
15552
+ try {
15553
+ new Intl.DateTimeFormat("en", { timeZone: value });
15554
+ return true;
15555
+ } catch {
15556
+ return false;
15557
+ }
15558
+ }, "Unsupported usage statistics timezone").optional(),
15550
15559
  harness: harness.optional(),
15551
15560
  model: model.nullable().optional(),
15552
15561
  project: project.nullable().optional(),
15553
- /** One local date inside the range. */
15562
+ /** One date in the query timezone inside the range. */
15554
15563
  date: localDate.optional()
15555
15564
  });
15556
15565
  var usageStatisticsTotalsSchema = external_exports.strictObject({
@@ -15586,7 +15595,7 @@ var usageStatisticsSessionSchema = external_exports.strictObject({
15586
15595
  });
15587
15596
  var usageStatisticsResultSchema = external_exports.strictObject({
15588
15597
  range: external_exports.enum(USAGE_STATISTICS_RANGES),
15589
- /** First local date of the range; null for all time. */
15598
+ /** First date in the query timezone (Host local when omitted); null for all time. */
15590
15599
  from: localDate.nullable(),
15591
15600
  to: localDate,
15592
15601
  /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
@@ -15626,7 +15635,7 @@ var usageStatisticsResultSchema = external_exports.strictObject({
15626
15635
  totals: usageStatisticsTotalsSchema,
15627
15636
  /** Each date and Harness of the range: every filter except the day. */
15628
15637
  daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
15629
- /** Local weekday (0 = Sunday) and hour, all filters applied. */
15638
+ /** Weekday (0 = Sunday) and hour in the query timezone, all filters applied. */
15630
15639
  hourly: external_exports.array(external_exports.strictObject({
15631
15640
  weekday: external_exports.number().int().min(0).max(6),
15632
15641
  hour: external_exports.number().int().min(0).max(23),
@@ -15666,6 +15675,51 @@ var hostInteractionIdSchema = opaqueIdSchema.brand();
15666
15675
  var threadPrewarmDiscardParamsSchema = external_exports.object({ threadId: hostThreadIdSchema });
15667
15676
  var threadPrewarmDiscardResultSchema = external_exports.object({ discarded: external_exports.boolean() });
15668
15677
 
15678
+ // packages/shared-contracts/dist/thread-questions.js
15679
+ var field = external_exports.discriminatedUnion("type", [
15680
+ external_exports.object({
15681
+ id: external_exports.string().min(1),
15682
+ type: external_exports.literal("choice"),
15683
+ prompt: external_exports.string(),
15684
+ options: external_exports.array(external_exports.object({
15685
+ value: external_exports.string().min(1),
15686
+ label: external_exports.string(),
15687
+ description: external_exports.string().optional()
15688
+ })).min(1),
15689
+ multiple: external_exports.boolean(),
15690
+ allowOther: external_exports.boolean(),
15691
+ optional: external_exports.boolean()
15692
+ }),
15693
+ external_exports.object({
15694
+ id: external_exports.string().min(1),
15695
+ type: external_exports.literal("text"),
15696
+ prompt: external_exports.string(),
15697
+ multiline: external_exports.boolean(),
15698
+ secret: external_exports.literal(false),
15699
+ optional: external_exports.boolean(),
15700
+ placeholder: external_exports.string().optional(),
15701
+ prefill: external_exports.string().optional()
15702
+ })
15703
+ ]);
15704
+ var threadQuestionSchema = external_exports.object({
15705
+ interactionId: external_exports.string().min(1),
15706
+ turnId: external_exports.string().min(1),
15707
+ title: external_exports.string().optional(),
15708
+ questions: external_exports.array(field).min(1)
15709
+ }).refine(({ questions }) => questions.some((q) => q.type === "choice" && q.multiple), {
15710
+ message: "Shared cards require at least one multi-select question"
15711
+ });
15712
+ var threadQuestionsListParamsSchema = external_exports.strictObject({ threadId: external_exports.string().min(1) });
15713
+ var threadQuestionsResultSchema = external_exports.object({ questions: external_exports.array(threadQuestionSchema) });
15714
+ var threadQuestionRespondParamsSchema = external_exports.strictObject({
15715
+ threadId: external_exports.string().min(1),
15716
+ turnId: external_exports.string().min(1),
15717
+ interactionId: external_exports.string().min(1),
15718
+ answers: external_exports.record(external_exports.string(), external_exports.array(external_exports.string())),
15719
+ cancelled: external_exports.boolean().default(false)
15720
+ });
15721
+ var threadQuestionRespondResultSchema = external_exports.object({ accepted: external_exports.literal(true) });
15722
+
15669
15723
  // packages/shared-contracts/dist/console.js
15670
15724
  var consoleAnnouncementSchema = external_exports.strictObject({
15671
15725
  title: external_exports.string().trim().min(1).max(200),
@@ -15686,6 +15740,8 @@ var CONSOLE_HOST_METHODS = Object.freeze([
15686
15740
  "codexhost/harness/display-settings/set",
15687
15741
  "codexhost/harness/inspect",
15688
15742
  "codexhost/harness/installation",
15743
+ "codexhost/harness/installation/start",
15744
+ "codexhost/harness/installation/status",
15689
15745
  "codexhost/harness/launch-settings/get",
15690
15746
  "codexhost/harness/launch-settings/set",
15691
15747
  "codexhost/harness/web-ui/open",
@@ -15764,7 +15820,18 @@ var threadManualCompactionStartedSchema = external_exports.strictObject({
15764
15820
  var nonNegativeSafeIntegerSchema = external_exports.number().int().safe().nonnegative();
15765
15821
  var finiteNonNegativeNumberSchema = external_exports.number().finite().nonnegative();
15766
15822
  var cacheHitRatePercentSchema = external_exports.number().finite().min(0).max(100);
15823
+ var indicatorTextSchema = (maximum) => harnessLocalizedTextSchema.refine((entries) => Object.values(entries).every((text) => text.length <= maximum));
15824
+ var composerIndicatorsSchema = external_exports.array(external_exports.object({
15825
+ kind: external_exports.literal("countdown"),
15826
+ id: external_exports.string().min(1).max(64),
15827
+ expiresAtUnix: nonNegativeSafeIntegerSchema,
15828
+ label: indicatorTextSchema(256).optional(),
15829
+ tooltip: indicatorTextSchema(1024).optional()
15830
+ }).strict()).max(2).refine((entries) => new Set(entries.map(({ id }) => id)).size === entries.length, {
15831
+ message: "Composer indicator IDs must be unique"
15832
+ });
15767
15833
  var threadUsageSnapshotSchema = external_exports.object({
15834
+ composerIndicators: composerIndicatorsSchema.optional(),
15768
15835
  inputTokens: nonNegativeSafeIntegerSchema.optional(),
15769
15836
  cachedInputTokens: nonNegativeSafeIntegerSchema.optional(),
15770
15837
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
@@ -16172,7 +16239,9 @@ var harnessSessionCapabilitiesSchema = external_exports.object({
16172
16239
  }).strict().optional(),
16173
16240
  autonomousTurns: external_exports.object({
16174
16241
  observe: external_exports.boolean()
16175
- }).strict().optional()
16242
+ }).strict().optional(),
16243
+ /** True only when `turn.steer` delivers input into the active Turn through a native primitive. */
16244
+ steer: external_exports.boolean().optional()
16176
16245
  }).strict();
16177
16246
  var harnessConfigurationStateSchema = external_exports.object({
16178
16247
  effectiveModel: harnessModelRefSchema.optional(),
@@ -16219,7 +16288,9 @@ var harnessInspectionSchema = external_exports.union([
16219
16288
  var harnessInspectParamsSchema = external_exports.object({
16220
16289
  harnessId: harnessIdSchema,
16221
16290
  cwd: nonBlankTextSchema2.max(16384).optional(),
16222
- refresh: external_exports.boolean().optional()
16291
+ refresh: external_exports.boolean().optional(),
16292
+ /** `availability` asks only whether the Harness can run; see `InspectHarnessInput.purpose`. */
16293
+ purpose: external_exports.literal("availability").optional()
16223
16294
  }).strict();
16224
16295
  var harnessWebUiOpenParamsSchema = external_exports.object({
16225
16296
  harnessId: harnessIdSchema
@@ -16302,6 +16373,15 @@ var threadOwnershipListResultSchema = external_exports.object({
16302
16373
  seen.add(thread.threadId);
16303
16374
  }
16304
16375
  });
16376
+ var threadSteeringInspectParamsSchema = external_exports.object({
16377
+ threadId: hostThreadIdSchema,
16378
+ /** The text about to be steered; a Harness command always stops and restarts. */
16379
+ text: external_exports.string().optional()
16380
+ }).strict();
16381
+ var threadSteerDeliverySchema = external_exports.enum(["activeTurn", "newTurn"]);
16382
+ var threadSteeringInspectResultSchema = external_exports.object({
16383
+ delivery: external_exports.enum(["official", "activeTurn", "newTurn"])
16384
+ }).strict();
16305
16385
 
16306
16386
  // packages/shared-contracts/dist/harness-plugins.js
16307
16387
  var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
@@ -16403,6 +16483,10 @@ var harnessInstallationStateSchema = external_exports.object({
16403
16483
  latestVersion: external_exports.string().min(1).max(128),
16404
16484
  updateAvailable: external_exports.boolean(),
16405
16485
  canUpdate: external_exports.boolean(),
16486
+ /** Defaults to CLI; some Harnesses ship only inside a desktop application. */
16487
+ versionKind: external_exports.enum(["cli", "application"]).optional(),
16488
+ /** Official download opened by the user; does not imply an automatic installation. */
16489
+ manualUpdateUrl: external_exports.url().max(2048).refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Manual updates require a credential-free HTTPS URL").optional(),
16406
16490
  // Adapter-owned diagnostic text; UI uses messageCode rather than displaying it verbatim.
16407
16491
  message: external_exports.string().max(2048).optional(),
16408
16492
  messageCode: external_exports.string().min(1).max(128).optional(),
@@ -16410,6 +16494,20 @@ var harnessInstallationStateSchema = external_exports.object({
16410
16494
  notice: harnessLocalizedTextSchema.optional(),
16411
16495
  latestVersionKind: external_exports.enum(["unknown", "tracking-branch"]).optional()
16412
16496
  }).strict();
16497
+ var harnessInstallationTaskParamsSchema = external_exports.object({ taskId: external_exports.string().uuid() }).strict();
16498
+ var harnessInstallationTaskSchema = external_exports.discriminatedUnion("status", [
16499
+ external_exports.object({ taskId: external_exports.string().uuid(), status: external_exports.literal("running") }).strict(),
16500
+ external_exports.object({
16501
+ taskId: external_exports.string().uuid(),
16502
+ status: external_exports.literal("succeeded"),
16503
+ result: harnessInstallationStateSchema
16504
+ }).strict(),
16505
+ external_exports.object({
16506
+ taskId: external_exports.string().uuid(),
16507
+ status: external_exports.literal("failed"),
16508
+ error: external_exports.object({ code: external_exports.number().int(), message: external_exports.string().min(1).max(2048) }).strict()
16509
+ }).strict()
16510
+ ]);
16413
16511
 
16414
16512
  // packages/shared-contracts/dist/codex-accounts.js
16415
16513
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
@@ -17440,9 +17538,9 @@ function parseAnnouncement(document) {
17440
17538
  const fields = /* @__PURE__ */ new Map();
17441
17539
  for (const line of (match[1] ?? "").split("\n")) {
17442
17540
  if (!line.trim()) continue;
17443
- const field = /^(enabled|title|type):[ \t]*(.+?)\s*$/u.exec(line);
17444
- if (!field?.[1] || !field[2] || fields.has(field[1])) return null;
17445
- fields.set(field[1], field[2]);
17541
+ const field2 = /^(enabled|title|type):[ \t]*(.+?)\s*$/u.exec(line);
17542
+ if (!field2?.[1] || !field2[2] || fields.has(field2[1])) return null;
17543
+ fields.set(field2[1], field2[2]);
17446
17544
  }
17447
17545
  if (fields.get("enabled") !== "true") return null;
17448
17546
  let title = fields.get("title");