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

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 (62) hide show
  1. package/README.md +1 -1
  2. package/app/codexhost-distribution.json +1 -1
  3. package/app/console-server.mjs +109 -94
  4. package/app/console-web.js +110 -95
  5. package/app/desktop-controller.mjs +109 -110
  6. package/app/host-runtime.mjs +14225 -10527
  7. package/app/plugins/antigravity/plugin.mjs +109 -94
  8. package/app/plugins/claude-code/plugin.mjs +229 -148
  9. package/app/plugins/codebuddy/plugin.mjs +109 -94
  10. package/app/plugins/codex-usage/plugin.mjs +109 -94
  11. package/app/plugins/copilot/plugin.mjs +109 -94
  12. package/app/plugins/cursor-cli/plugin.mjs +109 -94
  13. package/app/plugins/deepseek-harness/plugin.mjs +109 -94
  14. package/app/plugins/devin/plugin.mjs +109 -94
  15. package/app/plugins/enabled.json +0 -1
  16. package/app/plugins/grok/plugin.mjs +109 -94
  17. package/app/plugins/hermes/plugin.mjs +109 -94
  18. package/app/plugins/kimi-code/plugin.mjs +109 -94
  19. package/app/plugins/kiro-cli/plugin.mjs +109 -94
  20. package/app/plugins/omp/plugin.mjs +109 -94
  21. package/app/plugins/opencode/plugin.mjs +109 -94
  22. package/app/plugins/pi/plugin.mjs +109 -94
  23. package/app/plugins/qoder/plugin.mjs +109 -94
  24. package/app/plugins/qoder-cn/plugin.mjs +109 -94
  25. package/app/plugins/qwen-code/plugin.mjs +109 -94
  26. package/app/plugins/workbuddy/plugin.mjs +109 -94
  27. package/app/plugins/zcode/plugin.mjs +109 -94
  28. package/app/renderer-extension.js +128 -150
  29. package/app/web/assets/index-C3lniEH1.css +1 -0
  30. package/app/web/assets/index-D1dOzBMI.js +199 -0
  31. package/app/web/codexhost-settings.js +110 -95
  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-connection/client.js +1 -1
  37. package/app/web/plugins/deepseek-ai__dsh-client-ui-chat/client.js +2 -2
  38. package/app/web/plugins/deepseek-ai__dsh-client-ui-codexhost/client.js +57 -56
  39. package/app/web/plugins/deepseek-ai__dsh-client-ui-conversation/client.js +87 -87
  40. package/app/web/plugins/deepseek-ai__dsh-client-ui-directory-picker-browse/client.js +10 -10
  41. package/app/web/plugins/deepseek-ai__dsh-client-ui-input-trigger/client.js +1 -1
  42. package/app/web/plugins/deepseek-ai__dsh-client-ui-layout/client.js +3 -3
  43. package/app/web/plugins/deepseek-ai__dsh-client-ui-model-selection/client.js +2 -2
  44. package/app/web/plugins/deepseek-ai__dsh-client-ui-permission-presets/client.js +1 -1
  45. package/app/web/plugins/deepseek-ai__dsh-client-ui-settings/client.js +1 -1
  46. package/app/web/plugins/deepseek-ai__dsh-client-ui-settings-general/client.js +2 -2
  47. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar/client.js +2 -2
  48. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar-right/client.js +55 -55
  49. package/app/web/plugins/deepseek-ai__dsh-client-ui-tool/client.js +18 -18
  50. package/app/web/plugins/deepseek-ai__dsh-client-ui-workspace/client.js +8 -12
  51. package/app/web/plugins.json +4 -0
  52. package/app/web/sw.js +55 -24
  53. package/app/web-modules/server.mjs +1415 -784
  54. package/bin/codexhost +0 -0
  55. package/libexec/codexhost-shim +0 -0
  56. package/libexec/codexhost-updater +0 -0
  57. package/package.json +1 -1
  58. package/app/plugins/codex-cli/manifest.json +0 -16
  59. package/app/plugins/codex-cli/plugin.mjs +0 -20374
  60. package/app/web/assets/index-CIeTchMu.css +0 -1
  61. package/app/web/assets/index-DeAPBQbV.js +0 -199
  62. /package/app/{plugins/codex-cli/assets/icon.png → web/codex.png} +0 -0
@@ -14924,7 +14924,7 @@ var HARNESS_PERMISSION_MODE_CATALOG_MAX_LENGTH = 32;
14924
14924
  var nonBlankTextSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14925
14925
  message: "Value must not be empty or whitespace"
14926
14926
  });
14927
- 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();
14927
+ 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();
14928
14928
  var harnessPermissionModeSchema = external_exports.object({
14929
14929
  id: harnessPermissionModeIdSchema,
14930
14930
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
@@ -15308,7 +15308,12 @@ var threadInspectionParamsSchema = external_exports.object({
15308
15308
  }).strict();
15309
15309
  var codexThreadInspectionSchema = external_exports.object({
15310
15310
  owner: external_exports.literal("codex"),
15311
- locked: external_exports.literal(true),
15311
+ locked: external_exports.boolean(),
15312
+ effectiveModel: harnessModelRefSchema.optional(),
15313
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
15314
+ effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15315
+ effectivePermissionModeId: harnessPermissionModeIdSchema.optional(),
15316
+ history: harnessHistoryCapabilitiesSchema.optional(),
15312
15317
  supportsThreadReferences: external_exports.literal(true).optional()
15313
15318
  }).strict();
15314
15319
  var externalThreadInspectionSchema = external_exports.object({
@@ -15530,7 +15535,8 @@ var clientThreadSnapshotSchema = external_exports.object({
15530
15535
  thread: external_exports.object({
15531
15536
  id: external_exports.string().min(1),
15532
15537
  cwd: external_exports.string(),
15533
- modelProvider: external_exports.literal("codexhost"),
15538
+ /** External rows use codexhost; native Codex rows retain their official provider. */
15539
+ modelProvider: external_exports.string().min(1),
15534
15540
  createdAt: external_exports.number(),
15535
15541
  updatedAt: external_exports.number(),
15536
15542
  status: external_exports.object({ type: external_exports.string() }).passthrough(),
@@ -15544,6 +15550,11 @@ var clientThreadSnapshotSchema = external_exports.object({
15544
15550
  nextCursor: external_exports.string().nullable()
15545
15551
  }),
15546
15552
  configuration: external_exports.object({
15553
+ /** Native Codex model names are not external Harness transport refs. */
15554
+ native: external_exports.object({
15555
+ model: external_exports.string().min(1).max(1024).optional(),
15556
+ reasoningEffort: external_exports.string().min(1).max(128).optional()
15557
+ }).optional(),
15547
15558
  effectiveModel: harnessModelRefSchema.optional(),
15548
15559
  effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15549
15560
  effectivePermissionModeId: harnessPermissionModeIdSchema.optional()
@@ -15570,6 +15581,21 @@ var clientChannelResponseSchema = external_exports.object({
15570
15581
  result: record2
15571
15582
  });
15572
15583
 
15584
+ // packages/shared-contracts/dist/thread-catalog.js
15585
+ var threadCatalogReadParamsSchema = external_exports.object({
15586
+ includeArchived: external_exports.boolean().optional(),
15587
+ /** Absent means first page; null means this branch is exhausted. Native cursors only. */
15588
+ officialCursor: external_exports.object({ live: external_exports.string().nullable(), archived: external_exports.string().nullable().optional() }).strict().optional()
15589
+ }).strict();
15590
+ var threadCatalogReadResultSchema = external_exports.object({
15591
+ threads: external_exports.array(jsonObjectSchema),
15592
+ ownership: external_exports.array(threadOwnershipSchema),
15593
+ /** Known archived IDs, including visible local external records even when their rows are
15594
+ * excluded. Native archived IDs describe only the returned page, never a complete set. */
15595
+ archivedThreadIds: external_exports.array(hostThreadIdSchema),
15596
+ officialCursor: external_exports.object({ live: external_exports.string().nullable(), archived: external_exports.string().nullable().optional() }).strict().optional()
15597
+ }).strict();
15598
+
15573
15599
  // packages/shared-contracts/dist/voice.js
15574
15600
  var VOICE_AUDIO_MAX_BYTES = 10 * 1024 * 1024;
15575
15601
  var voiceAudioMimeTypeSchema = external_exports.string().regex(/^audio\/[a-z0-9.+-]+(?:\s*;[^\r\n]*)?$/i);
@@ -15783,96 +15809,19 @@ var idleReleaseSettingsSchema = external_exports.strictObject({
15783
15809
  });
15784
15810
  var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
15785
15811
  enabled: false,
15786
- timeoutMinutes: 30
15787
- });
15788
-
15789
- // packages/shared-contracts/dist/harness-plugins.js
15790
- var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
15791
- var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
15792
- var HARNESS_PLUGIN_LIMIT = 128;
15793
- var HARNESS_PLUGIN_SURFACES = ["desktop", "web"];
15794
- var harnessPluginSurfaceSchema = external_exports.enum(HARNESS_PLUGIN_SURFACES);
15795
- var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
15796
- var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
15797
- 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");
15798
- var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
15799
- var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
15800
- var harnessInstallationGuideSchema = external_exports.object({
15801
- commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
15802
- before: localizedTextSchema.optional(),
15803
- after: localizedTextSchema.optional(),
15804
- downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
15805
- }).strict();
15806
- var pluginPresentationShape = {
15807
- id: installedHarnessPluginIdSchema,
15808
- name: external_exports.string().trim().min(1).max(128),
15809
- version: external_exports.string().min(1).max(128),
15810
- /** Capability-only plugin; omitted for existing session-capable plugins. */
15811
- kind: external_exports.literal("usage").optional(),
15812
- /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
15813
- iconStyle: external_exports.object({
15814
- vector: external_exports.object({
15815
- viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
15816
- color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
15817
- paths: external_exports.array(external_exports.object({
15818
- d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
15819
- fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
15820
- fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
15821
- }).strict()).min(1).max(32)
15822
- }).strict().optional(),
15823
- background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
15824
- borderRadius: external_exports.number().min(0).max(50).optional(),
15825
- paddingRatio: external_exports.number().min(0).max(0.25).optional()
15826
- }).strict().optional(),
15827
- installation: harnessInstallationGuideSchema.optional(),
15828
- notice: localizedTextSchema.optional(),
15829
- /** The factory accepts a persisted local entrypoint through its construction context. */
15830
- launchCommand: external_exports.literal(true).optional(),
15831
- links: external_exports.object({
15832
- website: documentationUrlSchema.optional(),
15833
- documentation: documentationUrlSchema.optional(),
15834
- installation: documentationUrlSchema.optional()
15835
- }).strict().optional()
15836
- };
15837
- var harnessPluginSurfacesSchema = external_exports.array(harnessPluginSurfaceSchema).min(1).max(HARNESS_PLUGIN_SURFACES.length).refine((surfaces) => new Set(surfaces).size === surfaces.length, {
15838
- message: "Plugin surfaces must be unique"
15839
- });
15840
- var harnessPluginManifestSchema = external_exports.object({
15841
- manifestVersion: external_exports.literal(1),
15842
- ...pluginPresentationShape,
15843
- adapterApiVersion: external_exports.number().int().positive(),
15844
- entry: relativeResourceSchema,
15845
- icon: relativeResourceSchema.optional(),
15846
- /** Omitted means the plugin appears in every surface; never inferred from its identity. */
15847
- surfaces: harnessPluginSurfacesSchema.optional()
15848
- }).strict();
15849
- 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);
15850
- var harnessPluginDescriptorSchema = external_exports.object({
15851
- ...pluginPresentationShape,
15852
- icon: harnessPluginIconSchema.optional()
15853
- }).strict();
15854
- var harnessPluginListParamsSchema = external_exports.object({}).strict();
15855
- var harnessPluginListResultSchema = external_exports.object({
15856
- plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
15857
- }).strict();
15858
- var harnessPluginConfigurationSchema = external_exports.object({
15859
- version: external_exports.literal(1),
15860
- enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
15861
- }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
15862
- message: "Enabled plugin IDs must be unique",
15863
- path: ["enabled"]
15812
+ timeoutMinutes: 10
15864
15813
  });
15865
15814
 
15866
15815
  // packages/shared-contracts/dist/harness-preferences.js
15867
15816
  var harnessPreferenceScopeSchema = external_exports.string().regex(/^external$/u);
15868
- var preferenceHarnessKey = installedHarnessPluginIdSchema.transform((id) => String(id));
15817
+ var preferenceHarnessKey = harnessIdSchema.transform((id) => String(id));
15869
15818
  var harnessDefaultConfigurationSchema = external_exports.strictObject({
15870
15819
  model: harnessModelRefSchema.optional(),
15871
15820
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15872
15821
  permissionModeId: harnessPermissionModeIdSchema.optional()
15873
15822
  }).refine((value) => Boolean(value.model || value.thinkingOptionId || value.permissionModeId), "A default configuration must contain a preference");
15874
15823
  var newThreadDefaultsSchema = external_exports.strictObject({
15875
- lastHarness: installedHarnessPluginIdSchema.optional(),
15824
+ lastHarness: harnessIdSchema.optional(),
15876
15825
  byHarness: external_exports.record(preferenceHarnessKey, harnessDefaultConfigurationSchema)
15877
15826
  });
15878
15827
  var modelId = external_exports.string().min(1).max(1024);
@@ -15893,19 +15842,19 @@ var harnessPreferenceOperationSchema = external_exports.discriminatedUnion("kind
15893
15842
  external_exports.strictObject({ kind: external_exports.literal("idleRelease"), value: idleReleaseSettingsSchema }),
15894
15843
  external_exports.strictObject({
15895
15844
  kind: external_exports.literal("favorite"),
15896
- harnessId: installedHarnessPluginIdSchema,
15845
+ harnessId: harnessIdSchema,
15897
15846
  modelId,
15898
15847
  enabled: external_exports.boolean()
15899
15848
  }),
15900
15849
  external_exports.strictObject({
15901
15850
  kind: external_exports.literal("favorites"),
15902
- harnessId: installedHarnessPluginIdSchema,
15851
+ harnessId: harnessIdSchema,
15903
15852
  modelIds: external_exports.array(modelId).max(2048)
15904
15853
  }),
15905
15854
  external_exports.strictObject({
15906
15855
  kind: external_exports.literal("newThread"),
15907
- lastHarness: installedHarnessPluginIdSchema.optional(),
15908
- harnessId: installedHarnessPluginIdSchema.optional(),
15856
+ lastHarness: harnessIdSchema.optional(),
15857
+ harnessId: harnessIdSchema.optional(),
15909
15858
  configuration: harnessDefaultConfigurationSchema.optional()
15910
15859
  })
15911
15860
  ]);
@@ -15921,12 +15870,6 @@ var harnessPreferencePatchSchema = external_exports.strictObject({
15921
15870
  code: "custom",
15922
15871
  message: "A default Harness or complete configuration is required"
15923
15872
  });
15924
- const harnessId = "harnessId" in operation ? operation.harnessId : void 0;
15925
- if (harnessId === "codex")
15926
- ctx.addIssue({
15927
- code: "custom",
15928
- message: "Official Codex is not an external Harness"
15929
- });
15930
15873
  }
15931
15874
  });
15932
15875
  var harnessPreferencesDocumentSchema = external_exports.strictObject({
@@ -16303,6 +16246,76 @@ var harnessAccountListResultSchema = external_exports.object({
16303
16246
  accounts: external_exports.array(requireReportedQuota(harnessAccountSnapshotObject.extend(harnessAccountIdentityShape))).max(128)
16304
16247
  }).strict();
16305
16248
 
16249
+ // packages/shared-contracts/dist/harness-plugins.js
16250
+ var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
16251
+ var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
16252
+ var HARNESS_PLUGIN_LIMIT = 128;
16253
+ var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
16254
+ var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
16255
+ 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");
16256
+ var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
16257
+ var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
16258
+ var harnessInstallationGuideSchema = external_exports.object({
16259
+ commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
16260
+ before: localizedTextSchema.optional(),
16261
+ after: localizedTextSchema.optional(),
16262
+ downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
16263
+ }).strict();
16264
+ var pluginPresentationShape = {
16265
+ id: installedHarnessPluginIdSchema,
16266
+ name: external_exports.string().trim().min(1).max(128),
16267
+ version: external_exports.string().min(1).max(128),
16268
+ /** Capability-only plugin; omitted for existing session-capable plugins. */
16269
+ kind: external_exports.literal("usage").optional(),
16270
+ /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
16271
+ iconStyle: external_exports.object({
16272
+ vector: external_exports.object({
16273
+ viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
16274
+ color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
16275
+ paths: external_exports.array(external_exports.object({
16276
+ d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
16277
+ fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
16278
+ fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
16279
+ }).strict()).min(1).max(32)
16280
+ }).strict().optional(),
16281
+ background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
16282
+ borderRadius: external_exports.number().min(0).max(50).optional(),
16283
+ paddingRatio: external_exports.number().min(0).max(0.25).optional()
16284
+ }).strict().optional(),
16285
+ installation: harnessInstallationGuideSchema.optional(),
16286
+ notice: localizedTextSchema.optional(),
16287
+ /** The factory accepts a persisted local entrypoint through its construction context. */
16288
+ launchCommand: external_exports.literal(true).optional(),
16289
+ links: external_exports.object({
16290
+ website: documentationUrlSchema.optional(),
16291
+ documentation: documentationUrlSchema.optional(),
16292
+ installation: documentationUrlSchema.optional()
16293
+ }).strict().optional()
16294
+ };
16295
+ var harnessPluginManifestSchema = external_exports.object({
16296
+ manifestVersion: external_exports.literal(1),
16297
+ ...pluginPresentationShape,
16298
+ adapterApiVersion: external_exports.number().int().positive(),
16299
+ entry: relativeResourceSchema,
16300
+ icon: relativeResourceSchema.optional()
16301
+ }).strict();
16302
+ 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);
16303
+ var harnessPluginDescriptorSchema = external_exports.object({
16304
+ ...pluginPresentationShape,
16305
+ icon: harnessPluginIconSchema.optional()
16306
+ }).strict();
16307
+ var harnessPluginListParamsSchema = external_exports.object({}).strict();
16308
+ var harnessPluginListResultSchema = external_exports.object({
16309
+ plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
16310
+ }).strict();
16311
+ var harnessPluginConfigurationSchema = external_exports.object({
16312
+ version: external_exports.literal(1),
16313
+ enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
16314
+ }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
16315
+ message: "Enabled plugin IDs must be unique",
16316
+ path: ["enabled"]
16317
+ });
16318
+
16306
16319
  // packages/shared-contracts/dist/harness-route.js
16307
16320
  var harnessPluginRouteSchema = external_exports.object({
16308
16321
  harnessId: harnessPluginIdSchema,
@@ -16496,6 +16509,8 @@ var harnessCommandDescriptorSchema = external_exports.object({
16496
16509
  }).strict();
16497
16510
  var harnessCommandCatalogSchema = external_exports.object({
16498
16511
  commands: external_exports.array(harnessCommandDescriptorSchema),
16512
+ /** Partial discovery failures; valid commands remain available. */
16513
+ warnings: external_exports.array(external_exports.string().min(1)).optional(),
16499
16514
  /**
16500
16515
  * `live` when the catalog includes what a native Session reports for its
16501
16516
  * workspace (custom commands, skills); `static` for Adapter built-ins only.
@@ -16531,7 +16546,7 @@ var threadCommandExecuteParamsSchema = external_exports.object({
16531
16546
  }).strict();
16532
16547
  var threadCommandExecuteResultSchema = external_exports.object({
16533
16548
  accepted: external_exports.literal(true),
16534
- turnId: hostTurnIdSchema
16549
+ turnId: hostTurnIdSchema.optional()
16535
16550
  }).strict();
16536
16551
 
16537
16552
  // packages/shared-contracts/dist/json-rpc.js
@@ -16902,13 +16917,6 @@ async function startControllerAttachmentServer(options) {
16902
16917
  if (newline < 0) return;
16903
16918
  handled = true;
16904
16919
  const line = request.slice(0, newline).replace(/\r$/, "");
16905
- if (options.invalidateThreadCatalog && line === `CATALOG ${options.nonce}` && request.slice(newline + 1) === "") {
16906
- void Promise.resolve().then(() => options.invalidateThreadCatalog?.()).then(
16907
- () => respond(socket, "ready"),
16908
- () => respond(socket, "failed")
16909
- );
16910
- return;
16911
- }
16912
16920
  const remotePrefix = `REMOTE ${options.nonce} `;
16913
16921
  if (options.remoteConnections && line.startsWith(remotePrefix)) {
16914
16922
  let input;
@@ -20163,15 +20171,6 @@ ${rendererSource}`,
20163
20171
  attachmentServer = await dependencies.startAttachmentServer({
20164
20172
  port: options.attachmentPort,
20165
20173
  nonce: options.attachmentNonce,
20166
- invalidateThreadCatalog: async () => {
20167
- if (signal.aborted) return;
20168
- try {
20169
- await session?.executeRenderer(
20170
- "window.__codexhostRendererBindingProbeV1?.invalidateThreadCatalog?.()"
20171
- );
20172
- } catch {
20173
- }
20174
- },
20175
20174
  remoteConnections: async (request) => {
20176
20175
  const current = await useSession(() => recoverSession());
20177
20176
  return remoteConnectionsReplySchema.parse(