@codexhost/cli-darwin-arm64 0.18.0-beta.1 → 0.18.0-beta.3

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 (58) hide show
  1. package/README.md +1 -1
  2. package/app/codexhost-distribution.json +1 -1
  3. package/app/console-server.mjs +103 -93
  4. package/app/console-web.js +104 -94
  5. package/app/desktop-controller.mjs +103 -109
  6. package/app/host-runtime.mjs +10067 -8374
  7. package/app/plugins/antigravity/plugin.mjs +103 -93
  8. package/app/plugins/claude-code/plugin.mjs +103 -93
  9. package/app/plugins/codebuddy/plugin.mjs +103 -93
  10. package/app/plugins/codex-usage/plugin.mjs +103 -93
  11. package/app/plugins/copilot/plugin.mjs +103 -93
  12. package/app/plugins/cursor-cli/plugin.mjs +103 -93
  13. package/app/plugins/deepseek-harness/plugin.mjs +103 -93
  14. package/app/plugins/devin/plugin.mjs +103 -93
  15. package/app/plugins/enabled.json +0 -1
  16. package/app/plugins/grok/plugin.mjs +103 -93
  17. package/app/plugins/hermes/plugin.mjs +103 -93
  18. package/app/plugins/kimi-code/plugin.mjs +103 -93
  19. package/app/plugins/kiro-cli/plugin.mjs +103 -93
  20. package/app/plugins/omp/plugin.mjs +103 -93
  21. package/app/plugins/opencode/plugin.mjs +103 -93
  22. package/app/plugins/pi/plugin.mjs +103 -93
  23. package/app/plugins/qoder/plugin.mjs +103 -93
  24. package/app/plugins/qoder-cn/plugin.mjs +103 -93
  25. package/app/plugins/qwen-code/plugin.mjs +103 -93
  26. package/app/plugins/workbuddy/plugin.mjs +103 -93
  27. package/app/plugins/zcode/plugin.mjs +103 -93
  28. package/app/renderer-extension.js +122 -149
  29. package/app/web/assets/index-C3lniEH1.css +1 -0
  30. package/app/web/assets/index-aKvkfNJN.js +199 -0
  31. package/app/web/codexhost-settings.js +104 -94
  32. package/app/web/index.html +2 -2
  33. package/app/web/plugins/deepseek-ai__dsh-api-gateway/client.js +1 -1
  34. package/app/web/plugins/deepseek-ai__dsh-api-remotes/client.js +64 -64
  35. package/app/web/plugins/deepseek-ai__dsh-api-session-controller/client.js +69 -69
  36. package/app/web/plugins/deepseek-ai__dsh-client-ui-chat/client.js +2 -2
  37. package/app/web/plugins/deepseek-ai__dsh-client-ui-codexhost/client.js +63 -62
  38. package/app/web/plugins/deepseek-ai__dsh-client-ui-conversation/client.js +85 -85
  39. package/app/web/plugins/deepseek-ai__dsh-client-ui-directory-picker-browse/client.js +10 -10
  40. package/app/web/plugins/deepseek-ai__dsh-client-ui-input-trigger/client.js +1 -1
  41. package/app/web/plugins/deepseek-ai__dsh-client-ui-layout/client.js +3 -3
  42. package/app/web/plugins/deepseek-ai__dsh-client-ui-model-selection/client.js +2 -2
  43. package/app/web/plugins/deepseek-ai__dsh-client-ui-permission-presets/client.js +1 -1
  44. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar/client.js +1 -1
  45. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar-right/client.js +55 -55
  46. package/app/web/plugins/deepseek-ai__dsh-client-ui-tool/client.js +18 -18
  47. package/app/web/plugins/deepseek-ai__dsh-client-ui-workspace/client.js +8 -8
  48. package/app/web/sw.js +55 -24
  49. package/app/web-modules/server.mjs +1091 -680
  50. package/bin/codexhost +0 -0
  51. package/libexec/codexhost-shim +0 -0
  52. package/libexec/codexhost-updater +0 -0
  53. package/package.json +1 -1
  54. package/app/plugins/codex-cli/manifest.json +0 -16
  55. package/app/plugins/codex-cli/plugin.mjs +0 -20374
  56. package/app/web/assets/index-CIeTchMu.css +0 -1
  57. package/app/web/assets/index-DeAPBQbV.js +0 -199
  58. /package/app/{plugins/codex-cli/assets/icon.png → web/codex.png} +0 -0
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.18.0-beta.1
10
+ npm install -g @codexhost/cli@0.18.0-beta.3
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.18.0-beta.1","distribution":"npm","target":"macos-arm64"}
1
+ {"schemaVersion":1,"version":"0.18.0-beta.3","distribution":"npm","target":"macos-arm64"}
@@ -15580,7 +15580,7 @@ var HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH = 32;
15580
15580
  var nonBlankTextSchema = external_exports.string().refine((value) => value.trim().length > 0, {
15581
15581
  message: "Value must not be empty or whitespace"
15582
15582
  });
15583
- var harnessPermissionModeIdSchema = nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_ID_MAX_LENGTH).regex(/^[A-Za-z0-9._~-]+$/u, "Permission Mode ID must use transport-safe characters").brand();
15583
+ var harnessPermissionModeIdSchema = nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_ID_MAX_LENGTH).regex(/^[A-Za-z0-9._~:-]+$/u, "Permission Mode ID must use transport-safe characters").brand();
15584
15584
  var harnessPermissionModeSchema = external_exports.object({
15585
15585
  id: harnessPermissionModeIdSchema,
15586
15586
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
@@ -15964,7 +15964,12 @@ var threadInspectionParamsSchema = external_exports.object({
15964
15964
  }).strict();
15965
15965
  var codexThreadInspectionSchema = external_exports.object({
15966
15966
  owner: external_exports.literal("codex"),
15967
- locked: external_exports.literal(true),
15967
+ locked: external_exports.boolean(),
15968
+ effectiveModel: harnessModelRefSchema.optional(),
15969
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
15970
+ effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15971
+ effectivePermissionModeId: harnessPermissionModeIdSchema.optional(),
15972
+ history: harnessHistoryCapabilitiesSchema.optional(),
15968
15973
  supportsThreadReferences: external_exports.literal(true).optional()
15969
15974
  }).strict();
15970
15975
  var externalThreadInspectionSchema = external_exports.object({
@@ -16186,7 +16191,8 @@ var clientThreadSnapshotSchema = external_exports.object({
16186
16191
  thread: external_exports.object({
16187
16192
  id: external_exports.string().min(1),
16188
16193
  cwd: external_exports.string(),
16189
- modelProvider: external_exports.literal("codexhost"),
16194
+ /** External rows use codexhost; native Codex rows retain their official provider. */
16195
+ modelProvider: external_exports.string().min(1),
16190
16196
  createdAt: external_exports.number(),
16191
16197
  updatedAt: external_exports.number(),
16192
16198
  status: external_exports.object({ type: external_exports.string() }).passthrough(),
@@ -16200,6 +16206,11 @@ var clientThreadSnapshotSchema = external_exports.object({
16200
16206
  nextCursor: external_exports.string().nullable()
16201
16207
  }),
16202
16208
  configuration: external_exports.object({
16209
+ /** Native Codex model names are not external Harness transport refs. */
16210
+ native: external_exports.object({
16211
+ model: external_exports.string().min(1).max(1024).optional(),
16212
+ reasoningEffort: external_exports.string().min(1).max(128).optional()
16213
+ }).optional(),
16203
16214
  effectiveModel: harnessModelRefSchema.optional(),
16204
16215
  effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
16205
16216
  effectivePermissionModeId: harnessPermissionModeIdSchema.optional()
@@ -16226,6 +16237,16 @@ var clientChannelResponseSchema = external_exports.object({
16226
16237
  result: record3
16227
16238
  });
16228
16239
 
16240
+ // packages/shared-contracts/dist/thread-catalog.js
16241
+ var threadCatalogReadParamsSchema = external_exports.object({ includeArchived: external_exports.boolean().optional() }).strict();
16242
+ var threadCatalogReadResultSchema = external_exports.object({
16243
+ threads: external_exports.array(jsonObjectSchema),
16244
+ ownership: external_exports.array(threadOwnershipSchema),
16245
+ /** Known archived IDs, including visible local external records even when their rows are
16246
+ * excluded. Native archived IDs are complete only when includeArchived is true. */
16247
+ archivedThreadIds: external_exports.array(hostThreadIdSchema)
16248
+ }).strict();
16249
+
16229
16250
  // packages/shared-contracts/dist/voice.js
16230
16251
  var VOICE_AUDIO_MAX_BYTES = 10 * 1024 * 1024;
16231
16252
  var voiceAudioMimeTypeSchema = external_exports.string().regex(/^audio\/[a-z0-9.+-]+(?:\s*;[^\r\n]*)?$/i);
@@ -16441,93 +16462,16 @@ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
16441
16462
  timeoutMinutes: 30
16442
16463
  });
16443
16464
 
16444
- // packages/shared-contracts/dist/harness-plugins.js
16445
- var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
16446
- var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
16447
- var HARNESS_PLUGIN_LIMIT = 128;
16448
- var HARNESS_PLUGIN_SURFACES = ["desktop", "web"];
16449
- var harnessPluginSurfaceSchema = external_exports.enum(HARNESS_PLUGIN_SURFACES);
16450
- var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
16451
- var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
16452
- var relativeResourceSchema = external_exports.string().min(1).max(512).refine((value) => !/[\\\u0000:#?]/u.test(value) && !value.startsWith("/") && !value.split("/").some((part) => part === ".." || part === ""), "Plugin resources must be relative paths inside the plugin");
16453
- var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
16454
- var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
16455
- var harnessInstallationGuideSchema = external_exports.object({
16456
- commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
16457
- before: localizedTextSchema.optional(),
16458
- after: localizedTextSchema.optional(),
16459
- downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
16460
- }).strict();
16461
- var pluginPresentationShape = {
16462
- id: installedHarnessPluginIdSchema,
16463
- name: external_exports.string().trim().min(1).max(128),
16464
- version: external_exports.string().min(1).max(128),
16465
- /** Capability-only plugin; omitted for existing session-capable plugins. */
16466
- kind: external_exports.literal("usage").optional(),
16467
- /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
16468
- iconStyle: external_exports.object({
16469
- vector: external_exports.object({
16470
- viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
16471
- color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
16472
- paths: external_exports.array(external_exports.object({
16473
- d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
16474
- fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
16475
- fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
16476
- }).strict()).min(1).max(32)
16477
- }).strict().optional(),
16478
- background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
16479
- borderRadius: external_exports.number().min(0).max(50).optional(),
16480
- paddingRatio: external_exports.number().min(0).max(0.25).optional()
16481
- }).strict().optional(),
16482
- installation: harnessInstallationGuideSchema.optional(),
16483
- notice: localizedTextSchema.optional(),
16484
- /** The factory accepts a persisted local entrypoint through its construction context. */
16485
- launchCommand: external_exports.literal(true).optional(),
16486
- links: external_exports.object({
16487
- website: documentationUrlSchema.optional(),
16488
- documentation: documentationUrlSchema.optional(),
16489
- installation: documentationUrlSchema.optional()
16490
- }).strict().optional()
16491
- };
16492
- var harnessPluginSurfacesSchema = external_exports.array(harnessPluginSurfaceSchema).min(1).max(HARNESS_PLUGIN_SURFACES.length).refine((surfaces) => new Set(surfaces).size === surfaces.length, {
16493
- message: "Plugin surfaces must be unique"
16494
- });
16495
- var harnessPluginManifestSchema = external_exports.object({
16496
- manifestVersion: external_exports.literal(1),
16497
- ...pluginPresentationShape,
16498
- adapterApiVersion: external_exports.number().int().positive(),
16499
- entry: relativeResourceSchema,
16500
- icon: relativeResourceSchema.optional(),
16501
- /** Omitted means the plugin appears in every surface; never inferred from its identity. */
16502
- surfaces: harnessPluginSurfacesSchema.optional()
16503
- }).strict();
16504
- var harnessPluginIconSchema = external_exports.string().max(Math.ceil(HARNESS_PLUGIN_ICON_MAX_BYTES / 3) * 4 + 64).regex(/^data:image\/(?:png|jpeg|webp|svg\+xml);base64,[A-Za-z0-9+/]+={0,2}$/u);
16505
- var harnessPluginDescriptorSchema = external_exports.object({
16506
- ...pluginPresentationShape,
16507
- icon: harnessPluginIconSchema.optional()
16508
- }).strict();
16509
- var harnessPluginListParamsSchema = external_exports.object({}).strict();
16510
- var harnessPluginListResultSchema = external_exports.object({
16511
- plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
16512
- }).strict();
16513
- var harnessPluginConfigurationSchema = external_exports.object({
16514
- version: external_exports.literal(1),
16515
- enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
16516
- }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
16517
- message: "Enabled plugin IDs must be unique",
16518
- path: ["enabled"]
16519
- });
16520
-
16521
16465
  // packages/shared-contracts/dist/harness-preferences.js
16522
16466
  var harnessPreferenceScopeSchema = external_exports.string().regex(/^external$/u);
16523
- var preferenceHarnessKey = installedHarnessPluginIdSchema.transform((id) => String(id));
16467
+ var preferenceHarnessKey = harnessIdSchema.transform((id) => String(id));
16524
16468
  var harnessDefaultConfigurationSchema = external_exports.strictObject({
16525
16469
  model: harnessModelRefSchema.optional(),
16526
16470
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
16527
16471
  permissionModeId: harnessPermissionModeIdSchema.optional()
16528
16472
  }).refine((value) => Boolean(value.model || value.thinkingOptionId || value.permissionModeId), "A default configuration must contain a preference");
16529
16473
  var newThreadDefaultsSchema = external_exports.strictObject({
16530
- lastHarness: installedHarnessPluginIdSchema.optional(),
16474
+ lastHarness: harnessIdSchema.optional(),
16531
16475
  byHarness: external_exports.record(preferenceHarnessKey, harnessDefaultConfigurationSchema)
16532
16476
  });
16533
16477
  var modelId = external_exports.string().min(1).max(1024);
@@ -16548,19 +16492,19 @@ var harnessPreferenceOperationSchema = external_exports.discriminatedUnion("kind
16548
16492
  external_exports.strictObject({ kind: external_exports.literal("idleRelease"), value: idleReleaseSettingsSchema }),
16549
16493
  external_exports.strictObject({
16550
16494
  kind: external_exports.literal("favorite"),
16551
- harnessId: installedHarnessPluginIdSchema,
16495
+ harnessId: harnessIdSchema,
16552
16496
  modelId,
16553
16497
  enabled: external_exports.boolean()
16554
16498
  }),
16555
16499
  external_exports.strictObject({
16556
16500
  kind: external_exports.literal("favorites"),
16557
- harnessId: installedHarnessPluginIdSchema,
16501
+ harnessId: harnessIdSchema,
16558
16502
  modelIds: external_exports.array(modelId).max(2048)
16559
16503
  }),
16560
16504
  external_exports.strictObject({
16561
16505
  kind: external_exports.literal("newThread"),
16562
- lastHarness: installedHarnessPluginIdSchema.optional(),
16563
- harnessId: installedHarnessPluginIdSchema.optional(),
16506
+ lastHarness: harnessIdSchema.optional(),
16507
+ harnessId: harnessIdSchema.optional(),
16564
16508
  configuration: harnessDefaultConfigurationSchema.optional()
16565
16509
  })
16566
16510
  ]);
@@ -16576,12 +16520,6 @@ var harnessPreferencePatchSchema = external_exports.strictObject({
16576
16520
  code: "custom",
16577
16521
  message: "A default Harness or complete configuration is required"
16578
16522
  });
16579
- const harnessId = "harnessId" in operation ? operation.harnessId : void 0;
16580
- if (harnessId === "codex")
16581
- ctx.addIssue({
16582
- code: "custom",
16583
- message: "Official Codex is not an external Harness"
16584
- });
16585
16523
  }
16586
16524
  });
16587
16525
  var harnessPreferencesDocumentSchema = external_exports.strictObject({
@@ -16961,6 +16899,76 @@ var harnessAccountListResultSchema = external_exports.object({
16961
16899
  accounts: external_exports.array(requireReportedQuota(harnessAccountSnapshotObject.extend(harnessAccountIdentityShape))).max(128)
16962
16900
  }).strict();
16963
16901
 
16902
+ // packages/shared-contracts/dist/harness-plugins.js
16903
+ var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
16904
+ var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
16905
+ var HARNESS_PLUGIN_LIMIT = 128;
16906
+ var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
16907
+ var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
16908
+ var relativeResourceSchema = external_exports.string().min(1).max(512).refine((value) => !/[\\\u0000:#?]/u.test(value) && !value.startsWith("/") && !value.split("/").some((part) => part === ".." || part === ""), "Plugin resources must be relative paths inside the plugin");
16909
+ var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
16910
+ var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
16911
+ var harnessInstallationGuideSchema = external_exports.object({
16912
+ commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
16913
+ before: localizedTextSchema.optional(),
16914
+ after: localizedTextSchema.optional(),
16915
+ downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
16916
+ }).strict();
16917
+ var pluginPresentationShape = {
16918
+ id: installedHarnessPluginIdSchema,
16919
+ name: external_exports.string().trim().min(1).max(128),
16920
+ version: external_exports.string().min(1).max(128),
16921
+ /** Capability-only plugin; omitted for existing session-capable plugins. */
16922
+ kind: external_exports.literal("usage").optional(),
16923
+ /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
16924
+ iconStyle: external_exports.object({
16925
+ vector: external_exports.object({
16926
+ viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
16927
+ color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
16928
+ paths: external_exports.array(external_exports.object({
16929
+ d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
16930
+ fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
16931
+ fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
16932
+ }).strict()).min(1).max(32)
16933
+ }).strict().optional(),
16934
+ background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
16935
+ borderRadius: external_exports.number().min(0).max(50).optional(),
16936
+ paddingRatio: external_exports.number().min(0).max(0.25).optional()
16937
+ }).strict().optional(),
16938
+ installation: harnessInstallationGuideSchema.optional(),
16939
+ notice: localizedTextSchema.optional(),
16940
+ /** The factory accepts a persisted local entrypoint through its construction context. */
16941
+ launchCommand: external_exports.literal(true).optional(),
16942
+ links: external_exports.object({
16943
+ website: documentationUrlSchema.optional(),
16944
+ documentation: documentationUrlSchema.optional(),
16945
+ installation: documentationUrlSchema.optional()
16946
+ }).strict().optional()
16947
+ };
16948
+ var harnessPluginManifestSchema = external_exports.object({
16949
+ manifestVersion: external_exports.literal(1),
16950
+ ...pluginPresentationShape,
16951
+ adapterApiVersion: external_exports.number().int().positive(),
16952
+ entry: relativeResourceSchema,
16953
+ icon: relativeResourceSchema.optional()
16954
+ }).strict();
16955
+ var harnessPluginIconSchema = external_exports.string().max(Math.ceil(HARNESS_PLUGIN_ICON_MAX_BYTES / 3) * 4 + 64).regex(/^data:image\/(?:png|jpeg|webp|svg\+xml);base64,[A-Za-z0-9+/]+={0,2}$/u);
16956
+ var harnessPluginDescriptorSchema = external_exports.object({
16957
+ ...pluginPresentationShape,
16958
+ icon: harnessPluginIconSchema.optional()
16959
+ }).strict();
16960
+ var harnessPluginListParamsSchema = external_exports.object({}).strict();
16961
+ var harnessPluginListResultSchema = external_exports.object({
16962
+ plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
16963
+ }).strict();
16964
+ var harnessPluginConfigurationSchema = external_exports.object({
16965
+ version: external_exports.literal(1),
16966
+ enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
16967
+ }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
16968
+ message: "Enabled plugin IDs must be unique",
16969
+ path: ["enabled"]
16970
+ });
16971
+
16964
16972
  // packages/shared-contracts/dist/harness-route.js
16965
16973
  var harnessPluginRouteSchema = external_exports.object({
16966
16974
  harnessId: harnessPluginIdSchema,
@@ -17164,6 +17172,8 @@ var harnessCommandDescriptorSchema = external_exports.object({
17164
17172
  }).strict();
17165
17173
  var harnessCommandCatalogSchema = external_exports.object({
17166
17174
  commands: external_exports.array(harnessCommandDescriptorSchema),
17175
+ /** Partial discovery failures; valid commands remain available. */
17176
+ warnings: external_exports.array(external_exports.string().min(1)).optional(),
17167
17177
  /**
17168
17178
  * `live` when the catalog includes what a native Session reports for its
17169
17179
  * workspace (custom commands, skills); `static` for Adapter built-ins only.
@@ -17199,7 +17209,7 @@ var threadCommandExecuteParamsSchema = external_exports.object({
17199
17209
  }).strict();
17200
17210
  var threadCommandExecuteResultSchema = external_exports.object({
17201
17211
  accepted: external_exports.literal(true),
17202
- turnId: hostTurnIdSchema
17212
+ turnId: hostTurnIdSchema.optional()
17203
17213
  }).strict();
17204
17214
 
17205
17215
  // packages/shared-contracts/dist/json-rpc.js