@codexhost/cli-darwin-x64 0.12.2 → 0.13.1

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 (54) hide show
  1. package/README.md +1 -1
  2. package/THIRD_PARTY_NOTICES.txt +9 -1
  3. package/app/codexhost-distribution.json +1 -1
  4. package/app/console-server.mjs +319 -64
  5. package/app/console-web.js +5089 -1367
  6. package/app/desktop-controller.mjs +259 -41
  7. package/app/host-runtime.mjs +5735 -1564
  8. package/app/plugins/antigravity/manifest.json +18 -1
  9. package/app/plugins/antigravity/plugin.mjs +282 -41
  10. package/app/plugins/claude-code/manifest.json +28 -0
  11. package/app/plugins/claude-code/plugin.mjs +35300 -23918
  12. package/app/plugins/codebuddy/manifest.json +17 -0
  13. package/app/plugins/codebuddy/plugin.mjs +5971 -5355
  14. package/app/plugins/codex-usage/manifest.json +9 -0
  15. package/app/plugins/codex-usage/plugin.mjs +17324 -0
  16. package/app/plugins/cursor-cli/manifest.json +17 -0
  17. package/app/plugins/cursor-cli/plugin.mjs +357 -76
  18. package/app/plugins/deepseek-harness/assets/icon.svg +1 -0
  19. package/app/plugins/deepseek-harness/manifest.json +35 -2
  20. package/app/plugins/deepseek-harness/plugin.mjs +822 -241
  21. package/app/plugins/enabled.json +2 -1
  22. package/app/plugins/grok/manifest.json +21 -1
  23. package/app/plugins/grok/plugin.mjs +918 -258
  24. package/app/plugins/hermes/assets/icon.png +0 -0
  25. package/app/plugins/hermes/manifest.json +30 -2
  26. package/app/plugins/hermes/plugin.mjs +284 -32
  27. package/app/plugins/kimi-code/assets/icon.svg +5 -0
  28. package/app/plugins/kimi-code/manifest.json +25 -2
  29. package/app/plugins/kimi-code/plugin.mjs +561 -35
  30. package/app/plugins/kiro-cli/assets/kiro-agent.svg +11 -0
  31. package/app/plugins/kiro-cli/manifest.json +18 -1
  32. package/app/plugins/kiro-cli/plugin.mjs +290 -21
  33. package/app/plugins/omp/manifest.json +21 -1
  34. package/app/plugins/omp/plugin.mjs +2765 -1960
  35. package/app/plugins/opencode/manifest.json +18 -1
  36. package/app/plugins/opencode/plugin.mjs +723 -146
  37. package/app/plugins/pi/manifest.json +32 -0
  38. package/app/plugins/pi/plugin.mjs +2908 -2312
  39. package/app/plugins/qoder/manifest.json +18 -1
  40. package/app/plugins/qoder/plugin.mjs +634 -80
  41. package/app/plugins/qoder-cn/manifest.json +18 -1
  42. package/app/plugins/qoder-cn/plugin.mjs +634 -80
  43. package/app/plugins/workbuddy/manifest.json +18 -0
  44. package/app/plugins/workbuddy/plugin.mjs +6361 -5747
  45. package/app/plugins/zcode/manifest.json +19 -1
  46. package/app/plugins/zcode/plugin.mjs +1098 -259
  47. package/app/renderer-extension.js +13080 -8884
  48. package/bin/codexhost +0 -0
  49. package/libexec/codexhost-shim +0 -0
  50. package/libexec/codexhost-updater +0 -0
  51. package/licenses/Cordis-LICENSE.txt +21 -0
  52. package/licenses/Cosmokit-LICENSE.txt +21 -0
  53. package/package.json +1 -1
  54. package/app/plugins/kiro-cli/assets/icon.svg +0 -5
@@ -3,8 +3,25 @@
3
3
  "id": "antigravity",
4
4
  "name": "Antigravity CLI",
5
5
  "version": "0.0.0",
6
+ "installation": {
7
+ "commands": [
8
+ {
9
+ "terminal": "macOS / Linux · Terminal (sh/bash)",
10
+ "command": "curl -fsSL https://antigravity.google/cli/install.sh | bash"
11
+ },
12
+ {
13
+ "terminal": "Windows · PowerShell",
14
+ "command": "irm https://antigravity.google/cli/install.ps1 | iex"
15
+ }
16
+ ],
17
+ "after": {
18
+ "en": "After installation, run agy to complete login or setup.",
19
+ "zh-CN": "安装后运行 agy,完成登录或配置。"
20
+ }
21
+ },
6
22
  "links": {
7
- "installation": "https://antigravity.google/product/antigravity-cli"
23
+ "website": "https://antigravity.google/",
24
+ "installation": "https://antigravity.google/download#antigravity-cli"
8
25
  },
9
26
  "adapterApiVersion": 1,
10
27
  "entry": "plugin.mjs",
@@ -5053,8 +5053,8 @@ function az_default() {
5053
5053
  }
5054
5054
 
5055
5055
  // ../../../node_modules/zod/v4/locales/be.js
5056
- function getBelarusianPlural(count, one, few, many) {
5057
- const absCount = Math.abs(count);
5056
+ function getBelarusianPlural(count2, one, few, many) {
5057
+ const absCount = Math.abs(count2);
5058
5058
  const lastDigit = absCount % 10;
5059
5059
  const lastTwoDigits = absCount % 100;
5060
5060
  if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
@@ -7132,8 +7132,8 @@ function hu_default() {
7132
7132
  }
7133
7133
 
7134
7134
  // ../../../node_modules/zod/v4/locales/hy.js
7135
- function getArmenianPlural(count, one, many) {
7136
- return Math.abs(count) === 1 ? one : many;
7135
+ function getArmenianPlural(count2, one, many) {
7136
+ return Math.abs(count2) === 1 ? one : many;
7137
7137
  }
7138
7138
  function withDefiniteArticle(word) {
7139
7139
  if (!word)
@@ -9261,8 +9261,8 @@ function ro_default() {
9261
9261
  }
9262
9262
 
9263
9263
  // ../../../node_modules/zod/v4/locales/ru.js
9264
- function getRussianPlural(count, one, few, many) {
9265
- const absCount = Math.abs(count);
9264
+ function getRussianPlural(count2, one, few, many) {
9265
+ const absCount = Math.abs(count2);
9266
9266
  const lastDigit = absCount % 10;
9267
9267
  const lastTwoDigits = absCount % 100;
9268
9268
  if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
@@ -14931,6 +14931,15 @@ function date4(params) {
14931
14931
  // ../../../node_modules/zod/v4/classic/external.js
14932
14932
  config(en_default());
14933
14933
 
14934
+ // ../../shared-contracts/dist/delegation-read.js
14935
+ var REMOTE_THREAD_REPLY_MAX_BYTES = 16 * 1024 * 1024;
14936
+ var delegationReadParamsSchema = external_exports.strictObject({
14937
+ threadId: external_exports.string().min(1).max(1024),
14938
+ view: external_exports.enum(["result", "messages"]),
14939
+ cursor: external_exports.string().min(1).max(8192).optional(),
14940
+ limit: external_exports.number().int().min(1).max(100).optional()
14941
+ });
14942
+
14934
14943
  // ../../shared-contracts/dist/credential-imports.js
14935
14944
  var credentialSourceSchema = external_exports.object({
14936
14945
  id: external_exports.string().min(1).max(256),
@@ -15001,6 +15010,160 @@ var harnessDisplaySetSchema = external_exports.strictObject({
15001
15010
  initializeOnly: external_exports.boolean().optional()
15002
15011
  });
15003
15012
 
15013
+ // ../../shared-contracts/dist/model-price-overrides.js
15014
+ var usdPerMillionTokens = external_exports.number().finite().nonnegative();
15015
+ var modelPriceOverrideSchema = external_exports.strictObject({
15016
+ input: usdPerMillionTokens,
15017
+ output: usdPerMillionTokens,
15018
+ cacheRead: usdPerMillionTokens.optional(),
15019
+ cacheWrite: usdPerMillionTokens.optional(),
15020
+ cacheWrite1h: usdPerMillionTokens.optional()
15021
+ });
15022
+ var modelPriceKeySchema = external_exports.string().max(512).refine((key) => key.trim() === key && key.length > 0, "Model ID is required");
15023
+ var modelPriceOverridesSchema = external_exports.strictObject({
15024
+ /** Absolute path of the Host's `pricing.json`. */
15025
+ path: external_exports.string(),
15026
+ entries: external_exports.array(external_exports.strictObject({ key: external_exports.string(), price: modelPriceOverrideSchema })),
15027
+ /** Why the existing file is unusable; the Host then ignores it and refuses to overwrite it. */
15028
+ error: external_exports.string().nullable()
15029
+ });
15030
+ var modelPriceOverridesGetSchema = external_exports.strictObject({});
15031
+ var modelPriceOverridesSetSchema = external_exports.strictObject({
15032
+ key: modelPriceKeySchema,
15033
+ price: modelPriceOverrideSchema.nullable(),
15034
+ previousKey: modelPriceKeySchema.optional()
15035
+ });
15036
+ var modelPriceDefaultParamsSchema = external_exports.strictObject({
15037
+ model: modelPriceKeySchema
15038
+ });
15039
+ var modelPriceSuggestionSchema = external_exports.strictObject({
15040
+ /** Verified from catalog canonical links, not inferred from names or equal prices. */
15041
+ official: external_exports.boolean().optional(),
15042
+ canonicalModelId: external_exports.string().min(1).optional(),
15043
+ provider: external_exports.string().min(1).max(512),
15044
+ model: external_exports.string().min(1).max(512),
15045
+ price: modelPriceOverrideSchema
15046
+ });
15047
+ var modelPriceDefaultResultSchema = external_exports.strictObject({
15048
+ price: modelPriceOverrideSchema.nullable(),
15049
+ /** Local catalog suggestions only; never used automatically for pricing. */
15050
+ suggestions: external_exports.array(modelPriceSuggestionSchema).max(6).optional()
15051
+ });
15052
+
15053
+ // ../../shared-contracts/dist/usage-statistics.js
15054
+ var USAGE_STATISTICS_RANGES = ["today", "7d", "30d", "90d", "all"];
15055
+ var count = external_exports.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
15056
+ var localDate = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/u);
15057
+ var harness = external_exports.string().min(1).max(128);
15058
+ var model = external_exports.string().min(1).max(512);
15059
+ var project = external_exports.string().min(1).max(4096);
15060
+ var usageStatisticsParamsSchema = external_exports.strictObject({
15061
+ range: external_exports.enum(USAGE_STATISTICS_RANGES),
15062
+ harness: harness.optional(),
15063
+ model: model.nullable().optional(),
15064
+ project: project.nullable().optional(),
15065
+ /** One local date inside the range. */
15066
+ date: localDate.optional()
15067
+ });
15068
+ var usageStatisticsTotalsSchema = external_exports.strictObject({
15069
+ requests: count,
15070
+ inputTokens: count,
15071
+ cachedInputTokens: count,
15072
+ cacheWriteInputTokens: count,
15073
+ cacheKnownInputTokens: count,
15074
+ outputTokens: count,
15075
+ reasoningOutputTokens: count,
15076
+ /** USD at the public price, summed over the priced requests only. */
15077
+ costUsd: external_exports.number().finite().min(0),
15078
+ /** Requests without a price (or the cache data the price needs); not in `costUsd`. */
15079
+ unpricedRequests: count,
15080
+ /**
15081
+ * Requests whose storage gave no token counts: counted as requests, with neither tokens nor
15082
+ * cost, and not as unpriced.
15083
+ */
15084
+ unmeteredRequests: count
15085
+ });
15086
+ var totals = usageStatisticsTotalsSchema.shape;
15087
+ var usageStatisticsSessionSchema = external_exports.strictObject({
15088
+ harness,
15089
+ sessionId: external_exports.string().min(1).max(512),
15090
+ project: project.nullable(),
15091
+ /** Persisted Desktop title for a mapped Session, otherwise its native name; may be absent. */
15092
+ title: external_exports.string().min(1).max(200).optional(),
15093
+ /** Models the session used, most requests first. */
15094
+ models: external_exports.array(model).max(16),
15095
+ firstAtMs: count,
15096
+ lastAtMs: count,
15097
+ ...totals
15098
+ });
15099
+ var usageStatisticsResultSchema = external_exports.strictObject({
15100
+ range: external_exports.enum(USAGE_STATISTICS_RANGES),
15101
+ /** First local date of the range; null for all time. */
15102
+ from: localDate.nullable(),
15103
+ to: localDate,
15104
+ /** The filters these figures apply, echoed so a late answer to older filters is recognised. */
15105
+ filters: external_exports.strictObject({
15106
+ harness: harness.nullable(),
15107
+ model: model.nullable(),
15108
+ unknownModel: external_exports.boolean(),
15109
+ project: project.nullable(),
15110
+ unknownProject: external_exports.boolean(),
15111
+ date: localDate.nullable()
15112
+ }),
15113
+ /** Reading of native storage: incomplete while the first read, or a refresh, is under way. */
15114
+ reading: external_exports.strictObject({ complete: external_exports.boolean(), sources: count, read: count }),
15115
+ /** Harnesses whose storage could not be read; their part is missing, the rest is complete. */
15116
+ failures: external_exports.array(external_exports.strictObject({ harness, message: external_exports.string().max(2048) })).max(256),
15117
+ /** Every value seen in the range, ignoring the filters, to choose filters from. */
15118
+ options: external_exports.strictObject({
15119
+ harnesses: external_exports.array(harness).max(256),
15120
+ models: external_exports.array(model.nullable()).max(4096),
15121
+ projects: external_exports.array(project.nullable()).max(4096)
15122
+ }),
15123
+ /** Current display metadata, scoped by Harness. Never a pricing or filter identity.
15124
+ * Optional for older Hosts; missing/conflicting labels fall back to the native model ID.
15125
+ */
15126
+ modelLabels: external_exports.array(external_exports.strictObject({ harness, model, label: model })).max(4096).optional(),
15127
+ /** Native credits, all filters applied, never combined across Harnesses or treated as USD.
15128
+ * Only groups with at least one reported value appear; reportedRequests exposes partial data.
15129
+ */
15130
+ credits: external_exports.array(external_exports.strictObject({
15131
+ harness,
15132
+ model: model.nullable(),
15133
+ credits: external_exports.number().finite().min(0),
15134
+ reportedRequests: count,
15135
+ requests: count
15136
+ })).max(4096).optional(),
15137
+ /** All filters applied. */
15138
+ totals: usageStatisticsTotalsSchema,
15139
+ /** Each date and Harness of the range: every filter except the day. */
15140
+ daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
15141
+ /** Local weekday (0 = Sunday) and hour, all filters applied. */
15142
+ hourly: external_exports.array(external_exports.strictObject({
15143
+ weekday: external_exports.number().int().min(0).max(6),
15144
+ hour: external_exports.number().int().min(0).max(23),
15145
+ ...totals
15146
+ })).max(168),
15147
+ byHarness: external_exports.array(external_exports.strictObject({ harness, ...totals })).max(256),
15148
+ byModel: external_exports.array(external_exports.strictObject({
15149
+ model: model.nullable(),
15150
+ ...totals,
15151
+ /** Requests priced by what the Harness recorded they cost, not by a price list. */
15152
+ harnessPricedRequests: count
15153
+ })).max(4096),
15154
+ byProject: external_exports.array(external_exports.strictObject({ project: project.nullable(), ...totals })).max(4096),
15155
+ /**
15156
+ * The sessions that spent the most, by cost and by tokens without cache, all filters applied;
15157
+ * requests without a native session are not listed here but count everywhere else.
15158
+ */
15159
+ sessions: external_exports.array(usageStatisticsSessionSchema).max(100),
15160
+ /**
15161
+ * The sessions last active in the range, newest first, all filters applied. Optional for older
15162
+ * Hosts; missing is treated as no list rather than no sessions.
15163
+ */
15164
+ recentSessions: external_exports.array(usageStatisticsSessionSchema).max(100).optional()
15165
+ });
15166
+
15004
15167
  // ../../shared-contracts/dist/ids.js
15005
15168
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
15006
15169
  message: "Identifier must not be empty or whitespace"
@@ -15048,6 +15211,10 @@ var CONSOLE_HOST_METHODS = Object.freeze([
15048
15211
  "codexhost/account/list",
15049
15212
  "codexhost/account/refresh",
15050
15213
  "codexhost/account/usage/inspect",
15214
+ "codexhost/usage/model-prices/get",
15215
+ "codexhost/usage/model-prices/set",
15216
+ "codexhost/usage/model-prices/default",
15217
+ "codexhost/usage/statistics/get",
15051
15218
  "codexhost/update/check",
15052
15219
  "codexhost/update/start",
15053
15220
  "codexhost/update/status"
@@ -15112,6 +15279,7 @@ var threadUsageSnapshotSchema = external_exports.object({
15112
15279
  cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
15113
15280
  outputTokens: nonNegativeSafeIntegerSchema.optional(),
15114
15281
  outputTokensPerSecond: finiteNonNegativeNumberSchema.optional(),
15282
+ apiOutputTokensPerSecond: finiteNonNegativeNumberSchema.optional(),
15115
15283
  reasoningOutputTokens: nonNegativeSafeIntegerSchema.optional(),
15116
15284
  totalTokens: nonNegativeSafeIntegerSchema.optional(),
15117
15285
  totalCostUsd: finiteNonNegativeNumberSchema.optional(),
@@ -15123,7 +15291,11 @@ var threadUsageSnapshotSchema = external_exports.object({
15123
15291
  planFiveHourUsedPercent: cacheHitRatePercentSchema.optional(),
15124
15292
  planFiveHourResetsAtUnix: nonNegativeSafeIntegerSchema.optional(),
15125
15293
  planSevenDayUsedPercent: cacheHitRatePercentSchema.optional(),
15126
- planSevenDayResetsAtUnix: nonNegativeSafeIntegerSchema.optional()
15294
+ planSevenDayResetsAtUnix: nonNegativeSafeIntegerSchema.optional(),
15295
+ sessionCacheHitRatePercent: cacheHitRatePercentSchema.optional(),
15296
+ timeToFirstOutputMs: nonNegativeSafeIntegerSchema.optional(),
15297
+ costSource: external_exports.enum(["publicPrice", "native"]).optional(),
15298
+ unpricedModels: external_exports.array(external_exports.string().min(1)).min(1).optional()
15127
15299
  }).strict().superRefine((usage, context) => {
15128
15300
  if (Object.keys(usage).length === 0) {
15129
15301
  context.addIssue({ code: "custom", message: "Thread Usage must contain a reliable field" });
@@ -15144,6 +15316,20 @@ var threadUsageSnapshotSchema = external_exports.object({
15144
15316
  path: ["contextWindowTokens"]
15145
15317
  });
15146
15318
  }
15319
+ if (usage.costSource !== void 0 && usage.totalCostUsd === void 0) {
15320
+ context.addIssue({
15321
+ code: "custom",
15322
+ message: "Thread Usage costSource must be provided with totalCostUsd",
15323
+ path: ["costSource"]
15324
+ });
15325
+ }
15326
+ if (usage.unpricedModels !== void 0 && usage.costSource !== "publicPrice") {
15327
+ context.addIssue({
15328
+ code: "custom",
15329
+ message: "Thread Usage unpricedModels must be provided with a publicPrice cost",
15330
+ path: ["unpricedModels"]
15331
+ });
15332
+ }
15147
15333
  if (usage.planFiveHourResetsAtUnix !== void 0 && usage.planFiveHourUsedPercent === void 0) {
15148
15334
  context.addIssue({
15149
15335
  code: "custom",
@@ -15398,27 +15584,27 @@ var harnessModelCatalogSchema = external_exports.object({
15398
15584
  }).strict().superRefine((catalog, context) => {
15399
15585
  const refs = /* @__PURE__ */ new Set();
15400
15586
  const thinkingIds = new Set(catalog.thinkingOptions.map(({ id }) => id));
15401
- for (const [index, model] of catalog.models.entries()) {
15402
- if (refs.has(model.ref.id)) {
15587
+ for (const [index, model2] of catalog.models.entries()) {
15588
+ if (refs.has(model2.ref.id)) {
15403
15589
  context.addIssue({
15404
15590
  code: "custom",
15405
15591
  message: "Model Catalog refs must be unique",
15406
15592
  path: ["models", index, "ref", "id"]
15407
15593
  });
15408
15594
  }
15409
- refs.add(model.ref.id);
15410
- if (model.fastModel) {
15411
- if (refs.has(model.fastModel.id) || catalog.models.some((entry) => entry.ref.id === model.fastModel?.id)) {
15595
+ refs.add(model2.ref.id);
15596
+ if (model2.fastModel) {
15597
+ if (refs.has(model2.fastModel.id) || catalog.models.some((entry) => entry.ref.id === model2.fastModel?.id)) {
15412
15598
  context.addIssue({
15413
15599
  code: "custom",
15414
15600
  message: "Fast Model refs must be distinct and unique",
15415
15601
  path: ["models", index, "fastModel"]
15416
15602
  });
15417
15603
  }
15418
- refs.add(model.fastModel.id);
15604
+ refs.add(model2.fastModel.id);
15419
15605
  }
15420
15606
  const supportedThinkingIds = /* @__PURE__ */ new Set();
15421
- for (const [optionIndex, optionId] of (model.supportedThinkingOptionIds ?? []).entries()) {
15607
+ for (const [optionIndex, optionId] of (model2.supportedThinkingOptionIds ?? []).entries()) {
15422
15608
  if (supportedThinkingIds.has(optionId)) {
15423
15609
  context.addIssue({
15424
15610
  code: "custom",
@@ -15612,13 +15798,40 @@ var HARNESS_PLUGIN_LIMIT = 128;
15612
15798
  var harnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).refine((id) => id !== "codex", "The official Codex identity is reserved").pipe(harnessIdSchema);
15613
15799
  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");
15614
15800
  var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
15801
+ var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
15802
+ var harnessInstallationGuideSchema = external_exports.object({
15803
+ commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
15804
+ before: localizedTextSchema.optional(),
15805
+ after: localizedTextSchema.optional(),
15806
+ downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
15807
+ }).strict();
15615
15808
  var pluginPresentationShape = {
15616
15809
  id: harnessPluginIdSchema,
15617
15810
  name: external_exports.string().trim().min(1).max(128),
15618
15811
  version: external_exports.string().min(1).max(128),
15812
+ /** Capability-only plugin; omitted for existing session-capable plugins. */
15813
+ kind: external_exports.literal("usage").optional(),
15814
+ /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
15815
+ iconStyle: external_exports.object({
15816
+ vector: external_exports.object({
15817
+ viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
15818
+ color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
15819
+ paths: external_exports.array(external_exports.object({
15820
+ d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
15821
+ fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
15822
+ fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
15823
+ }).strict()).min(1).max(32)
15824
+ }).strict().optional(),
15825
+ background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
15826
+ borderRadius: external_exports.number().min(0).max(50).optional(),
15827
+ paddingRatio: external_exports.number().min(0).max(0.25).optional()
15828
+ }).strict().optional(),
15829
+ installation: harnessInstallationGuideSchema.optional(),
15830
+ notice: localizedTextSchema.optional(),
15619
15831
  /** The factory accepts a persisted local entrypoint through its construction context. */
15620
15832
  launchCommand: external_exports.literal(true).optional(),
15621
15833
  links: external_exports.object({
15834
+ website: documentationUrlSchema.optional(),
15622
15835
  documentation: documentationUrlSchema.optional(),
15623
15836
  installation: documentationUrlSchema.optional()
15624
15837
  }).strict().optional()
@@ -16037,6 +16250,11 @@ var codexSshDraftSchema = external_exports.strictObject({
16037
16250
  });
16038
16251
  var remoteConnectionsRequestSchema = external_exports.discriminatedUnion("action", [
16039
16252
  external_exports.strictObject({ action: external_exports.literal("list") }),
16253
+ external_exports.strictObject({
16254
+ action: external_exports.literal("read-thread"),
16255
+ hostId: hostId.refine((id) => id !== "local"),
16256
+ input: delegationReadParamsSchema
16257
+ }),
16040
16258
  external_exports.strictObject({
16041
16259
  action: external_exports.literal("save"),
16042
16260
  draft: codexSshDraftSchema,
@@ -16167,10 +16385,12 @@ var tokenFields = [
16167
16385
  ];
16168
16386
  var safeIntegerFields = [
16169
16387
  "planFiveHourResetsAtUnix",
16170
- "planSevenDayResetsAtUnix"
16388
+ "planSevenDayResetsAtUnix",
16389
+ "timeToFirstOutputMs"
16171
16390
  ];
16172
16391
  var percentFields = [
16173
16392
  "cacheHitRatePercent",
16393
+ "sessionCacheHitRatePercent",
16174
16394
  "planFiveHourUsedPercent",
16175
16395
  "planSevenDayUsedPercent"
16176
16396
  ];
@@ -16178,10 +16398,31 @@ var usageFields = /* @__PURE__ */ new Set([
16178
16398
  ...tokenFields,
16179
16399
  ...safeIntegerFields,
16180
16400
  ...percentFields,
16401
+ "sessionCacheUsage",
16181
16402
  "totalCostUsd",
16182
16403
  "totalCredits",
16183
16404
  "contextUsagePercent",
16184
- "outputTokensPerSecond"
16405
+ "outputTokensPerSecond",
16406
+ "apiOutputTokensPerSecond",
16407
+ "costSource",
16408
+ "unpricedModels"
16409
+ ]);
16410
+ var requestTokenFields = [
16411
+ "inputTokens",
16412
+ "cachedInputTokens",
16413
+ "cacheWriteInputTokens",
16414
+ "cacheWrite1hInputTokens",
16415
+ "outputTokens",
16416
+ "reasoningOutputTokens",
16417
+ "startedAtMs",
16418
+ "completedAtMs"
16419
+ ];
16420
+ var requestFields = /* @__PURE__ */ new Set([
16421
+ ...requestTokenFields,
16422
+ "requestId",
16423
+ "historical",
16424
+ "model",
16425
+ "provider"
16185
16426
  ]);
16186
16427
 
16187
16428
  // dist/command.js
@@ -16346,14 +16587,14 @@ var AntigravityHistory = class _AntigravityHistory {
16346
16587
  const file2 = historyPath(input.environment);
16347
16588
  const nativeSessionId = input.nativeSessionId ?? null;
16348
16589
  let turns = [];
16349
- let model;
16590
+ let model2;
16350
16591
  let thinkingOptionId;
16351
16592
  if (file2 && nativeSessionId) {
16352
16593
  try {
16353
16594
  const parsed = historySchema.safeParse(JSON.parse(await readFile(file2, "utf8")));
16354
16595
  if (parsed.success && parsed.data.nativeSessionId === nativeSessionId) {
16355
16596
  turns = parsed.data.turns;
16356
- model = parsed.data.model;
16597
+ model2 = parsed.data.model;
16357
16598
  thinkingOptionId = parsed.data.thinkingOptionId;
16358
16599
  }
16359
16600
  } catch {
@@ -16374,7 +16615,7 @@ var AntigravityHistory = class _AntigravityHistory {
16374
16615
  file: file2,
16375
16616
  nativeSessionId,
16376
16617
  turns,
16377
- ...model ? { model } : {},
16618
+ ...model2 ? { model: model2 } : {},
16378
16619
  ...thinkingOptionId ? { thinkingOptionId } : {}
16379
16620
  });
16380
16621
  }
@@ -16456,8 +16697,8 @@ var AntigravityHistory = class _AntigravityHistory {
16456
16697
  this.#nativeSessionId = nativeSessionId;
16457
16698
  this.#queueWrite();
16458
16699
  }
16459
- setSelection(model, thinkingOptionId) {
16460
- this.#model = model;
16700
+ setSelection(model2, thinkingOptionId) {
16701
+ this.#model = model2;
16461
16702
  this.#thinkingOptionId = thinkingOptionId;
16462
16703
  this.#queueWrite();
16463
16704
  }
@@ -16486,7 +16727,7 @@ var AntigravityHistory = class _AntigravityHistory {
16486
16727
  const file2 = this.#file;
16487
16728
  const nativeSessionId = this.#nativeSessionId;
16488
16729
  const turns = this.#turns.map(jsonTurn);
16489
- const model = this.#model;
16730
+ const model2 = this.#model;
16490
16731
  const thinkingOptionId = this.#thinkingOptionId;
16491
16732
  this.#write = this.#write.catch(() => void 0).then(async () => {
16492
16733
  const directory = path5.dirname(file2);
@@ -16497,7 +16738,7 @@ var AntigravityHistory = class _AntigravityHistory {
16497
16738
  formatVersion: HISTORY_VERSION,
16498
16739
  nativeSessionId,
16499
16740
  turns,
16500
- ...model ? { model } : {},
16741
+ ...model2 ? { model: model2 } : {},
16501
16742
  ...thinkingOptionId ? { thinkingOptionId } : {}
16502
16743
  })}
16503
16744
  `, { mode: 384 });
@@ -16706,14 +16947,14 @@ async function forkAntigravitySession(options) {
16706
16947
  }
16707
16948
  } : {}
16708
16949
  }));
16709
- const model = sourceSession?.model ?? sourceHistory.model;
16950
+ const model2 = sourceSession?.model ?? sourceHistory.model;
16710
16951
  const thinkingOptionId = sourceSession?.thinkingOptionId ?? sourceHistory.thinkingOptionId;
16711
16952
  const permissionMode = sourceSession?.permissionMode ?? "dangerously-skip-permissions";
16712
16953
  const forkedHistory = await AntigravityHistory.createDerived({
16713
16954
  environment: sessionEnvironment,
16714
16955
  nativeSessionId: derivedNativeSessionId,
16715
16956
  turns: copiedTurns,
16716
- ...model ? { model } : {},
16957
+ ...model2 ? { model: model2 } : {},
16717
16958
  ...thinkingOptionId ? { thinkingOptionId } : {}
16718
16959
  });
16719
16960
  await Promise.all([
@@ -16728,7 +16969,7 @@ async function forkAntigravitySession(options) {
16728
16969
  const session = createSession({
16729
16970
  history: forkedHistory,
16730
16971
  nativeRef: derivedNativeRef,
16731
- ...model ? { model } : {},
16972
+ ...model2 ? { model: model2 } : {},
16732
16973
  ...thinkingOptionId ? { thinkingOptionId } : {},
16733
16974
  permissionMode,
16734
16975
  cwd: input.cwd,
@@ -16810,19 +17051,19 @@ function parseAntigravityModels(output) {
16810
17051
  ...defaultThinkingOptionId ? { defaultThinkingOptionId } : {}
16811
17052
  });
16812
17053
  }
16813
- function antigravityModelArguments(model, thinkingOptionId) {
16814
- if (!model)
17054
+ function antigravityModelArguments(model2, thinkingOptionId) {
17055
+ if (!model2)
16815
17056
  return [];
16816
- const arguments_ = ["--model", model.id];
16817
- if (thinkingOptionId && !EFFORT_SUFFIX_PATTERN.test(model.id)) {
17057
+ const arguments_ = ["--model", model2.id];
17058
+ if (thinkingOptionId && !EFFORT_SUFFIX_PATTERN.test(model2.id)) {
16818
17059
  arguments_.push("--effort", thinkingOptionId);
16819
17060
  }
16820
17061
  return arguments_;
16821
17062
  }
16822
- function antigravityAvailableThinkingOptions(catalog, model) {
16823
- if (!catalog || !model)
17063
+ function antigravityAvailableThinkingOptions(catalog, model2) {
17064
+ if (!catalog || !model2)
16824
17065
  return void 0;
16825
- const supported = catalog.models.find(({ ref }) => ref.id === model.id)?.supportedThinkingOptionIds;
17066
+ const supported = catalog.models.find(({ ref }) => ref.id === model2.id)?.supportedThinkingOptionIds;
16826
17067
  if (!supported)
16827
17068
  return void 0;
16828
17069
  const options = supported.flatMap((id) => {
@@ -16920,14 +17161,14 @@ async function rollbackAntigravityLastTurn(options) {
16920
17161
  }
16921
17162
  } : {}
16922
17163
  }));
16923
- const model = sourceSession?.model ?? sourceHistory.model;
17164
+ const model2 = sourceSession?.model ?? sourceHistory.model;
16924
17165
  const thinkingOptionId = sourceSession?.thinkingOptionId ?? sourceHistory.thinkingOptionId;
16925
17166
  const permissionMode = sourceSession?.permissionMode ?? "dangerously-skip-permissions";
16926
17167
  const rolledBackHistory = await AntigravityHistory.createDerived({
16927
17168
  environment: sessionEnvironment,
16928
17169
  nativeSessionId: derivedNativeSessionId,
16929
17170
  turns: mappedTurns,
16930
- ...model ? { model } : {},
17171
+ ...model2 ? { model: model2 } : {},
16931
17172
  ...thinkingOptionId ? { thinkingOptionId } : {}
16932
17173
  });
16933
17174
  await Promise.all([
@@ -16942,7 +17183,7 @@ async function rollbackAntigravityLastTurn(options) {
16942
17183
  const session = createSession({
16943
17184
  history: rolledBackHistory,
16944
17185
  nativeRef: derivedNativeRef,
16945
- ...model ? { model } : {},
17186
+ ...model2 ? { model: model2 } : {},
16946
17187
  ...thinkingOptionId ? { thinkingOptionId } : {},
16947
17188
  permissionMode,
16948
17189
  cwd: input.cwd,
@@ -19823,10 +20064,10 @@ var AntigravityAdapter = class {
19823
20064
  ...nativeRef ? { nativeSessionId: nativeRef.nativeSessionId } : {},
19824
20065
  ...input.kind === "resume" && input.knownTurnRefs ? { knownTurnRefs: input.knownTurnRefs } : {}
19825
20066
  });
19826
- const model = (input.kind === "create" ? input.model : void 0) ?? history.model;
20067
+ const model2 = (input.kind === "create" ? input.model : void 0) ?? history.model;
19827
20068
  const thinkingOptionId = (input.kind === "create" ? input.thinkingOptionId : void 0) ?? history.thinkingOptionId;
19828
20069
  if (thinkingOptionId) {
19829
- const available = antigravityAvailableThinkingOptions(catalog, model);
20070
+ const available = antigravityAvailableThinkingOptions(catalog, model2);
19830
20071
  if (!available?.some(({ id }) => id === thinkingOptionId)) {
19831
20072
  return {
19832
20073
  ok: false,
@@ -19838,15 +20079,15 @@ var AntigravityAdapter = class {
19838
20079
  };
19839
20080
  }
19840
20081
  }
19841
- if (model || thinkingOptionId)
19842
- history.setSelection(model, thinkingOptionId);
20082
+ if (model2 || thinkingOptionId)
20083
+ history.setSelection(model2, thinkingOptionId);
19843
20084
  const session = new AntigravitySession({
19844
20085
  ...catalog ? { catalog } : {},
19845
20086
  cwd: input.cwd,
19846
20087
  environment: sessionEnvironment,
19847
20088
  executable,
19848
20089
  history,
19849
- ...model ? { model } : {},
20090
+ ...model2 ? { model: model2 } : {},
19850
20091
  ...nativeRef ? { nativeRef } : {},
19851
20092
  permissionMode,
19852
20093
  printTimeout: this.#printTimeout,
@@ -3,7 +3,35 @@
3
3
  "id": "claude-code",
4
4
  "name": "Claude Code",
5
5
  "version": "0.0.0",
6
+ "iconStyle": {
7
+ "vector": {
8
+ "viewBox": "0 0 24 24",
9
+ "color": "#d97757",
10
+ "paths": [
11
+ {
12
+ "d": "M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"
13
+ }
14
+ ]
15
+ }
16
+ },
17
+ "installation": {
18
+ "commands": [
19
+ {
20
+ "terminal": "macOS / Linux · Terminal (sh/bash)",
21
+ "command": "curl -fsSL https://claude.ai/install.sh | bash"
22
+ },
23
+ {
24
+ "terminal": "Windows · PowerShell",
25
+ "command": "irm https://claude.ai/install.ps1 | iex"
26
+ }
27
+ ],
28
+ "after": {
29
+ "en": "After installation, run claude to complete login or setup.",
30
+ "zh-CN": "安装后运行 claude,完成登录或配置。"
31
+ }
32
+ },
6
33
  "links": {
34
+ "website": "https://code.claude.com/",
7
35
  "installation": "https://code.claude.com/docs/en/quickstart"
8
36
  },
9
37
  "adapterApiVersion": 1,