@codexhost/cli-darwin-x64 0.12.2 → 0.13.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 +1 -1
- package/THIRD_PARTY_NOTICES.txt +8 -0
- package/app/codexhost-distribution.json +1 -1
- package/app/console-server.mjs +232 -21
- package/app/console-web.js +4924 -935
- package/app/desktop-controller.mjs +252 -41
- package/app/host-runtime.mjs +5312 -1442
- package/app/plugins/antigravity/manifest.json +18 -1
- package/app/plugins/antigravity/plugin.mjs +275 -41
- package/app/plugins/claude-code/manifest.json +28 -0
- package/app/plugins/claude-code/plugin.mjs +1045 -355
- package/app/plugins/codebuddy/manifest.json +17 -0
- package/app/plugins/codebuddy/plugin.mjs +5930 -5357
- package/app/plugins/codex-usage/manifest.json +9 -0
- package/app/plugins/codex-usage/plugin.mjs +16703 -0
- package/app/plugins/cursor-cli/manifest.json +17 -0
- package/app/plugins/cursor-cli/plugin.mjs +350 -76
- package/app/plugins/deepseek-harness/assets/icon.svg +1 -0
- package/app/plugins/deepseek-harness/manifest.json +35 -2
- package/app/plugins/deepseek-harness/plugin.mjs +797 -241
- package/app/plugins/enabled.json +2 -1
- package/app/plugins/grok/manifest.json +21 -1
- package/app/plugins/grok/plugin.mjs +883 -258
- package/app/plugins/hermes/assets/icon.png +0 -0
- package/app/plugins/hermes/manifest.json +30 -2
- package/app/plugins/hermes/plugin.mjs +277 -32
- package/app/plugins/kimi-code/assets/icon.svg +5 -0
- package/app/plugins/kimi-code/manifest.json +25 -2
- package/app/plugins/kimi-code/plugin.mjs +554 -35
- package/app/plugins/kiro-cli/assets/kiro-agent.svg +11 -0
- package/app/plugins/kiro-cli/manifest.json +18 -1
- package/app/plugins/kiro-cli/plugin.mjs +283 -21
- package/app/plugins/omp/manifest.json +21 -1
- package/app/plugins/omp/plugin.mjs +2737 -1956
- package/app/plugins/opencode/manifest.json +18 -1
- package/app/plugins/opencode/plugin.mjs +693 -146
- package/app/plugins/pi/manifest.json +32 -0
- package/app/plugins/pi/plugin.mjs +2809 -2254
- package/app/plugins/qoder/manifest.json +18 -1
- package/app/plugins/qoder/plugin.mjs +584 -80
- package/app/plugins/qoder-cn/manifest.json +18 -1
- package/app/plugins/qoder-cn/plugin.mjs +584 -80
- package/app/plugins/workbuddy/manifest.json +18 -0
- package/app/plugins/workbuddy/plugin.mjs +6316 -5745
- package/app/plugins/zcode/manifest.json +19 -1
- package/app/plugins/zcode/plugin.mjs +1065 -259
- package/app/renderer-extension.js +1485 -1570
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/licenses/Cordis-LICENSE.txt +21 -0
- package/licenses/Cosmokit-LICENSE.txt +21 -0
- package/package.json +1 -1
- package/app/plugins/kiro-cli/assets/icon.svg +0 -5
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.
|
|
10
|
+
npm install -g @codexhost/cli@0.13.0
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Do not install this package directly. npm selects it through the optional dependencies of `@codexhost/cli`.
|
package/THIRD_PARTY_NOTICES.txt
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
codexhost npm package third-party notices
|
|
2
2
|
|
|
3
|
+
@deepseek-ai/cordis 4.0.4
|
|
4
|
+
License: MIT
|
|
5
|
+
License text: licenses/Cordis-LICENSE.txt
|
|
6
|
+
|
|
7
|
+
@deepseek-ai/cosmokit 1.8.5
|
|
8
|
+
License: MIT
|
|
9
|
+
License text: licenses/Cosmokit-LICENSE.txt
|
|
10
|
+
|
|
3
11
|
@agentclientprotocol/sdk 1.3.0
|
|
4
12
|
License: Apache-2.0
|
|
5
13
|
License text: licenses/Agent-Client-Protocol-SDK-LICENSE.txt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"version":"0.
|
|
1
|
+
{"schemaVersion":1,"version":"0.13.0","distribution":"npm","target":"macos-x64"}
|
package/app/console-server.mjs
CHANGED
|
@@ -5498,8 +5498,8 @@ function az_default() {
|
|
|
5498
5498
|
}
|
|
5499
5499
|
|
|
5500
5500
|
// node_modules/zod/v4/locales/be.js
|
|
5501
|
-
function getBelarusianPlural(
|
|
5502
|
-
const absCount = Math.abs(
|
|
5501
|
+
function getBelarusianPlural(count2, one, few, many) {
|
|
5502
|
+
const absCount = Math.abs(count2);
|
|
5503
5503
|
const lastDigit = absCount % 10;
|
|
5504
5504
|
const lastTwoDigits = absCount % 100;
|
|
5505
5505
|
if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
|
|
@@ -7577,8 +7577,8 @@ function hu_default() {
|
|
|
7577
7577
|
}
|
|
7578
7578
|
|
|
7579
7579
|
// node_modules/zod/v4/locales/hy.js
|
|
7580
|
-
function getArmenianPlural(
|
|
7581
|
-
return Math.abs(
|
|
7580
|
+
function getArmenianPlural(count2, one, many) {
|
|
7581
|
+
return Math.abs(count2) === 1 ? one : many;
|
|
7582
7582
|
}
|
|
7583
7583
|
function withDefiniteArticle(word) {
|
|
7584
7584
|
if (!word)
|
|
@@ -9706,8 +9706,8 @@ function ro_default() {
|
|
|
9706
9706
|
}
|
|
9707
9707
|
|
|
9708
9708
|
// node_modules/zod/v4/locales/ru.js
|
|
9709
|
-
function getRussianPlural(
|
|
9710
|
-
const absCount = Math.abs(
|
|
9709
|
+
function getRussianPlural(count2, one, few, many) {
|
|
9710
|
+
const absCount = Math.abs(count2);
|
|
9711
9711
|
const lastDigit = absCount % 10;
|
|
9712
9712
|
const lastTwoDigits = absCount % 100;
|
|
9713
9713
|
if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
|
|
@@ -15376,6 +15376,15 @@ function date4(params) {
|
|
|
15376
15376
|
// node_modules/zod/v4/classic/external.js
|
|
15377
15377
|
config(en_default());
|
|
15378
15378
|
|
|
15379
|
+
// packages/shared-contracts/dist/delegation-read.js
|
|
15380
|
+
var REMOTE_THREAD_REPLY_MAX_BYTES = 16 * 1024 * 1024;
|
|
15381
|
+
var delegationReadParamsSchema = external_exports.strictObject({
|
|
15382
|
+
threadId: external_exports.string().min(1).max(1024),
|
|
15383
|
+
view: external_exports.enum(["result", "messages"]),
|
|
15384
|
+
cursor: external_exports.string().min(1).max(8192).optional(),
|
|
15385
|
+
limit: external_exports.number().int().min(1).max(100).optional()
|
|
15386
|
+
});
|
|
15387
|
+
|
|
15379
15388
|
// packages/shared-contracts/dist/credential-imports.js
|
|
15380
15389
|
var credentialSourceSchema = external_exports.object({
|
|
15381
15390
|
id: external_exports.string().min(1).max(256),
|
|
@@ -15446,6 +15455,153 @@ var harnessDisplaySetSchema = external_exports.strictObject({
|
|
|
15446
15455
|
initializeOnly: external_exports.boolean().optional()
|
|
15447
15456
|
});
|
|
15448
15457
|
|
|
15458
|
+
// packages/shared-contracts/dist/model-price-overrides.js
|
|
15459
|
+
var usdPerMillionTokens = external_exports.number().finite().nonnegative();
|
|
15460
|
+
var modelPriceOverrideSchema = external_exports.strictObject({
|
|
15461
|
+
input: usdPerMillionTokens,
|
|
15462
|
+
output: usdPerMillionTokens,
|
|
15463
|
+
cacheRead: usdPerMillionTokens.optional(),
|
|
15464
|
+
cacheWrite: usdPerMillionTokens.optional(),
|
|
15465
|
+
cacheWrite1h: usdPerMillionTokens.optional()
|
|
15466
|
+
});
|
|
15467
|
+
var modelPriceKeySchema = external_exports.string().max(512).refine((key) => key.trim() === key && key.length > 0, "Model ID is required");
|
|
15468
|
+
var modelPriceOverridesSchema = external_exports.strictObject({
|
|
15469
|
+
/** Absolute path of the Host's `pricing.json`. */
|
|
15470
|
+
path: external_exports.string(),
|
|
15471
|
+
entries: external_exports.array(external_exports.strictObject({ key: external_exports.string(), price: modelPriceOverrideSchema })),
|
|
15472
|
+
/** Why the existing file is unusable; the Host then ignores it and refuses to overwrite it. */
|
|
15473
|
+
error: external_exports.string().nullable()
|
|
15474
|
+
});
|
|
15475
|
+
var modelPriceOverridesGetSchema = external_exports.strictObject({});
|
|
15476
|
+
var modelPriceOverridesSetSchema = external_exports.strictObject({
|
|
15477
|
+
key: modelPriceKeySchema,
|
|
15478
|
+
price: modelPriceOverrideSchema.nullable(),
|
|
15479
|
+
previousKey: modelPriceKeySchema.optional()
|
|
15480
|
+
});
|
|
15481
|
+
var modelPriceDefaultParamsSchema = external_exports.strictObject({
|
|
15482
|
+
model: modelPriceKeySchema
|
|
15483
|
+
});
|
|
15484
|
+
var modelPriceSuggestionSchema = external_exports.strictObject({
|
|
15485
|
+
/** Verified from catalog canonical links, not inferred from names or equal prices. */
|
|
15486
|
+
official: external_exports.boolean().optional(),
|
|
15487
|
+
canonicalModelId: external_exports.string().min(1).optional(),
|
|
15488
|
+
provider: external_exports.string().min(1).max(512),
|
|
15489
|
+
model: external_exports.string().min(1).max(512),
|
|
15490
|
+
price: modelPriceOverrideSchema
|
|
15491
|
+
});
|
|
15492
|
+
var modelPriceDefaultResultSchema = external_exports.strictObject({
|
|
15493
|
+
price: modelPriceOverrideSchema.nullable(),
|
|
15494
|
+
/** Local catalog suggestions only; never used automatically for pricing. */
|
|
15495
|
+
suggestions: external_exports.array(modelPriceSuggestionSchema).max(6).optional()
|
|
15496
|
+
});
|
|
15497
|
+
|
|
15498
|
+
// packages/shared-contracts/dist/usage-statistics.js
|
|
15499
|
+
var USAGE_STATISTICS_RANGES = ["today", "7d", "30d", "90d", "all"];
|
|
15500
|
+
var count = external_exports.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
|
|
15501
|
+
var localDate = external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/u);
|
|
15502
|
+
var harness = external_exports.string().min(1).max(128);
|
|
15503
|
+
var model = external_exports.string().min(1).max(512);
|
|
15504
|
+
var project = external_exports.string().min(1).max(4096);
|
|
15505
|
+
var usageStatisticsParamsSchema = external_exports.strictObject({
|
|
15506
|
+
range: external_exports.enum(USAGE_STATISTICS_RANGES),
|
|
15507
|
+
harness: harness.optional(),
|
|
15508
|
+
model: model.nullable().optional(),
|
|
15509
|
+
project: project.nullable().optional(),
|
|
15510
|
+
/** One local date inside the range. */
|
|
15511
|
+
date: localDate.optional()
|
|
15512
|
+
});
|
|
15513
|
+
var usageStatisticsTotalsSchema = external_exports.strictObject({
|
|
15514
|
+
requests: count,
|
|
15515
|
+
inputTokens: count,
|
|
15516
|
+
cachedInputTokens: count,
|
|
15517
|
+
cacheWriteInputTokens: count,
|
|
15518
|
+
cacheKnownInputTokens: count,
|
|
15519
|
+
outputTokens: count,
|
|
15520
|
+
reasoningOutputTokens: count,
|
|
15521
|
+
/** USD at the public price, summed over the priced requests only. */
|
|
15522
|
+
costUsd: external_exports.number().finite().min(0),
|
|
15523
|
+
/** Requests without a price (or the cache data the price needs); not in `costUsd`. */
|
|
15524
|
+
unpricedRequests: count,
|
|
15525
|
+
/**
|
|
15526
|
+
* Requests whose storage gave no token counts: counted as requests, with neither tokens nor
|
|
15527
|
+
* cost, and not as unpriced.
|
|
15528
|
+
*/
|
|
15529
|
+
unmeteredRequests: count
|
|
15530
|
+
});
|
|
15531
|
+
var totals = usageStatisticsTotalsSchema.shape;
|
|
15532
|
+
var usageStatisticsSessionSchema = external_exports.strictObject({
|
|
15533
|
+
harness,
|
|
15534
|
+
sessionId: external_exports.string().min(1).max(512),
|
|
15535
|
+
project: project.nullable(),
|
|
15536
|
+
/** Models the session used, most requests first. */
|
|
15537
|
+
models: external_exports.array(model).max(16),
|
|
15538
|
+
firstAtMs: count,
|
|
15539
|
+
lastAtMs: count,
|
|
15540
|
+
...totals
|
|
15541
|
+
});
|
|
15542
|
+
var usageStatisticsResultSchema = external_exports.strictObject({
|
|
15543
|
+
range: external_exports.enum(USAGE_STATISTICS_RANGES),
|
|
15544
|
+
/** First local date of the range; null for all time. */
|
|
15545
|
+
from: localDate.nullable(),
|
|
15546
|
+
to: localDate,
|
|
15547
|
+
/** The filters these figures apply, echoed so a late answer to older filters is recognised. */
|
|
15548
|
+
filters: external_exports.strictObject({
|
|
15549
|
+
harness: harness.nullable(),
|
|
15550
|
+
model: model.nullable(),
|
|
15551
|
+
unknownModel: external_exports.boolean(),
|
|
15552
|
+
project: project.nullable(),
|
|
15553
|
+
unknownProject: external_exports.boolean(),
|
|
15554
|
+
date: localDate.nullable()
|
|
15555
|
+
}),
|
|
15556
|
+
/** Reading of native storage: incomplete while the first read, or a refresh, is under way. */
|
|
15557
|
+
reading: external_exports.strictObject({ complete: external_exports.boolean(), sources: count, read: count }),
|
|
15558
|
+
/** Harnesses whose storage could not be read; their part is missing, the rest is complete. */
|
|
15559
|
+
failures: external_exports.array(external_exports.strictObject({ harness, message: external_exports.string().max(2048) })).max(256),
|
|
15560
|
+
/** Every value seen in the range, ignoring the filters, to choose filters from. */
|
|
15561
|
+
options: external_exports.strictObject({
|
|
15562
|
+
harnesses: external_exports.array(harness).max(256),
|
|
15563
|
+
models: external_exports.array(model.nullable()).max(4096),
|
|
15564
|
+
projects: external_exports.array(project.nullable()).max(4096)
|
|
15565
|
+
}),
|
|
15566
|
+
/** Current display metadata, scoped by Harness. Never a pricing or filter identity.
|
|
15567
|
+
* Optional for older Hosts; missing/conflicting labels fall back to the native model ID.
|
|
15568
|
+
*/
|
|
15569
|
+
modelLabels: external_exports.array(external_exports.strictObject({ harness, model, label: model })).max(4096).optional(),
|
|
15570
|
+
/** Native credits, all filters applied, never combined across Harnesses or treated as USD.
|
|
15571
|
+
* Only groups with at least one reported value appear; reportedRequests exposes partial data.
|
|
15572
|
+
*/
|
|
15573
|
+
credits: external_exports.array(external_exports.strictObject({
|
|
15574
|
+
harness,
|
|
15575
|
+
model: model.nullable(),
|
|
15576
|
+
credits: external_exports.number().finite().min(0),
|
|
15577
|
+
reportedRequests: count,
|
|
15578
|
+
requests: count
|
|
15579
|
+
})).max(4096).optional(),
|
|
15580
|
+
/** All filters applied. */
|
|
15581
|
+
totals: usageStatisticsTotalsSchema,
|
|
15582
|
+
/** Each date and Harness of the range: every filter except the day. */
|
|
15583
|
+
daily: external_exports.array(external_exports.strictObject({ date: localDate, harness, ...totals })).max(2e5),
|
|
15584
|
+
/** Local weekday (0 = Sunday) and hour, all filters applied. */
|
|
15585
|
+
hourly: external_exports.array(external_exports.strictObject({
|
|
15586
|
+
weekday: external_exports.number().int().min(0).max(6),
|
|
15587
|
+
hour: external_exports.number().int().min(0).max(23),
|
|
15588
|
+
...totals
|
|
15589
|
+
})).max(168),
|
|
15590
|
+
byHarness: external_exports.array(external_exports.strictObject({ harness, ...totals })).max(256),
|
|
15591
|
+
byModel: external_exports.array(external_exports.strictObject({
|
|
15592
|
+
model: model.nullable(),
|
|
15593
|
+
...totals,
|
|
15594
|
+
/** Requests priced by what the Harness recorded they cost, not by a price list. */
|
|
15595
|
+
harnessPricedRequests: count
|
|
15596
|
+
})).max(4096),
|
|
15597
|
+
byProject: external_exports.array(external_exports.strictObject({ project: project.nullable(), ...totals })).max(4096),
|
|
15598
|
+
/**
|
|
15599
|
+
* The sessions that spent the most, by cost and by tokens without cache, all filters applied;
|
|
15600
|
+
* requests without a native session are not listed here but count everywhere else.
|
|
15601
|
+
*/
|
|
15602
|
+
sessions: external_exports.array(usageStatisticsSessionSchema).max(100)
|
|
15603
|
+
});
|
|
15604
|
+
|
|
15449
15605
|
// packages/shared-contracts/dist/ids.js
|
|
15450
15606
|
var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
|
|
15451
15607
|
message: "Identifier must not be empty or whitespace"
|
|
@@ -15493,6 +15649,10 @@ var CONSOLE_HOST_METHODS = Object.freeze([
|
|
|
15493
15649
|
"codexhost/account/list",
|
|
15494
15650
|
"codexhost/account/refresh",
|
|
15495
15651
|
"codexhost/account/usage/inspect",
|
|
15652
|
+
"codexhost/usage/model-prices/get",
|
|
15653
|
+
"codexhost/usage/model-prices/set",
|
|
15654
|
+
"codexhost/usage/model-prices/default",
|
|
15655
|
+
"codexhost/usage/statistics/get",
|
|
15496
15656
|
"codexhost/update/check",
|
|
15497
15657
|
"codexhost/update/start",
|
|
15498
15658
|
"codexhost/update/status"
|
|
@@ -15560,6 +15720,7 @@ var threadUsageSnapshotSchema = external_exports.object({
|
|
|
15560
15720
|
cacheWriteInputTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
15561
15721
|
outputTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
15562
15722
|
outputTokensPerSecond: finiteNonNegativeNumberSchema.optional(),
|
|
15723
|
+
apiOutputTokensPerSecond: finiteNonNegativeNumberSchema.optional(),
|
|
15563
15724
|
reasoningOutputTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
15564
15725
|
totalTokens: nonNegativeSafeIntegerSchema.optional(),
|
|
15565
15726
|
totalCostUsd: finiteNonNegativeNumberSchema.optional(),
|
|
@@ -15571,7 +15732,11 @@ var threadUsageSnapshotSchema = external_exports.object({
|
|
|
15571
15732
|
planFiveHourUsedPercent: cacheHitRatePercentSchema.optional(),
|
|
15572
15733
|
planFiveHourResetsAtUnix: nonNegativeSafeIntegerSchema.optional(),
|
|
15573
15734
|
planSevenDayUsedPercent: cacheHitRatePercentSchema.optional(),
|
|
15574
|
-
planSevenDayResetsAtUnix: nonNegativeSafeIntegerSchema.optional()
|
|
15735
|
+
planSevenDayResetsAtUnix: nonNegativeSafeIntegerSchema.optional(),
|
|
15736
|
+
sessionCacheHitRatePercent: cacheHitRatePercentSchema.optional(),
|
|
15737
|
+
timeToFirstOutputMs: nonNegativeSafeIntegerSchema.optional(),
|
|
15738
|
+
costSource: external_exports.enum(["publicPrice", "native"]).optional(),
|
|
15739
|
+
unpricedModels: external_exports.array(external_exports.string().min(1)).min(1).optional()
|
|
15575
15740
|
}).strict().superRefine((usage2, context) => {
|
|
15576
15741
|
if (Object.keys(usage2).length === 0) {
|
|
15577
15742
|
context.addIssue({ code: "custom", message: "Thread Usage must contain a reliable field" });
|
|
@@ -15592,6 +15757,20 @@ var threadUsageSnapshotSchema = external_exports.object({
|
|
|
15592
15757
|
path: ["contextWindowTokens"]
|
|
15593
15758
|
});
|
|
15594
15759
|
}
|
|
15760
|
+
if (usage2.costSource !== void 0 && usage2.totalCostUsd === void 0) {
|
|
15761
|
+
context.addIssue({
|
|
15762
|
+
code: "custom",
|
|
15763
|
+
message: "Thread Usage costSource must be provided with totalCostUsd",
|
|
15764
|
+
path: ["costSource"]
|
|
15765
|
+
});
|
|
15766
|
+
}
|
|
15767
|
+
if (usage2.unpricedModels !== void 0 && usage2.costSource !== "publicPrice") {
|
|
15768
|
+
context.addIssue({
|
|
15769
|
+
code: "custom",
|
|
15770
|
+
message: "Thread Usage unpricedModels must be provided with a publicPrice cost",
|
|
15771
|
+
path: ["unpricedModels"]
|
|
15772
|
+
});
|
|
15773
|
+
}
|
|
15595
15774
|
if (usage2.planFiveHourResetsAtUnix !== void 0 && usage2.planFiveHourUsedPercent === void 0) {
|
|
15596
15775
|
context.addIssue({
|
|
15597
15776
|
code: "custom",
|
|
@@ -15846,27 +16025,27 @@ var harnessModelCatalogSchema = external_exports.object({
|
|
|
15846
16025
|
}).strict().superRefine((catalog, context) => {
|
|
15847
16026
|
const refs = /* @__PURE__ */ new Set();
|
|
15848
16027
|
const thinkingIds = new Set(catalog.thinkingOptions.map(({ id }) => id));
|
|
15849
|
-
for (const [index,
|
|
15850
|
-
if (refs.has(
|
|
16028
|
+
for (const [index, model2] of catalog.models.entries()) {
|
|
16029
|
+
if (refs.has(model2.ref.id)) {
|
|
15851
16030
|
context.addIssue({
|
|
15852
16031
|
code: "custom",
|
|
15853
16032
|
message: "Model Catalog refs must be unique",
|
|
15854
16033
|
path: ["models", index, "ref", "id"]
|
|
15855
16034
|
});
|
|
15856
16035
|
}
|
|
15857
|
-
refs.add(
|
|
15858
|
-
if (
|
|
15859
|
-
if (refs.has(
|
|
16036
|
+
refs.add(model2.ref.id);
|
|
16037
|
+
if (model2.fastModel) {
|
|
16038
|
+
if (refs.has(model2.fastModel.id) || catalog.models.some((entry) => entry.ref.id === model2.fastModel?.id)) {
|
|
15860
16039
|
context.addIssue({
|
|
15861
16040
|
code: "custom",
|
|
15862
16041
|
message: "Fast Model refs must be distinct and unique",
|
|
15863
16042
|
path: ["models", index, "fastModel"]
|
|
15864
16043
|
});
|
|
15865
16044
|
}
|
|
15866
|
-
refs.add(
|
|
16045
|
+
refs.add(model2.fastModel.id);
|
|
15867
16046
|
}
|
|
15868
16047
|
const supportedThinkingIds = /* @__PURE__ */ new Set();
|
|
15869
|
-
for (const [optionIndex, optionId] of (
|
|
16048
|
+
for (const [optionIndex, optionId] of (model2.supportedThinkingOptionIds ?? []).entries()) {
|
|
15870
16049
|
if (supportedThinkingIds.has(optionId)) {
|
|
15871
16050
|
context.addIssue({
|
|
15872
16051
|
code: "custom",
|
|
@@ -16060,13 +16239,40 @@ var HARNESS_PLUGIN_LIMIT = 128;
|
|
|
16060
16239
|
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);
|
|
16061
16240
|
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");
|
|
16062
16241
|
var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
|
|
16242
|
+
var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
|
|
16243
|
+
var harnessInstallationGuideSchema = external_exports.object({
|
|
16244
|
+
commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
|
|
16245
|
+
before: localizedTextSchema.optional(),
|
|
16246
|
+
after: localizedTextSchema.optional(),
|
|
16247
|
+
downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
|
|
16248
|
+
}).strict();
|
|
16063
16249
|
var pluginPresentationShape = {
|
|
16064
16250
|
id: harnessPluginIdSchema,
|
|
16065
16251
|
name: external_exports.string().trim().min(1).max(128),
|
|
16066
16252
|
version: external_exports.string().min(1).max(128),
|
|
16253
|
+
/** Capability-only plugin; omitted for existing session-capable plugins. */
|
|
16254
|
+
kind: external_exports.literal("usage").optional(),
|
|
16255
|
+
/** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
|
|
16256
|
+
iconStyle: external_exports.object({
|
|
16257
|
+
vector: external_exports.object({
|
|
16258
|
+
viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
|
|
16259
|
+
color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
|
|
16260
|
+
paths: external_exports.array(external_exports.object({
|
|
16261
|
+
d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
|
|
16262
|
+
fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
|
|
16263
|
+
fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
|
|
16264
|
+
}).strict()).min(1).max(32)
|
|
16265
|
+
}).strict().optional(),
|
|
16266
|
+
background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
|
|
16267
|
+
borderRadius: external_exports.number().min(0).max(50).optional(),
|
|
16268
|
+
paddingRatio: external_exports.number().min(0).max(0.25).optional()
|
|
16269
|
+
}).strict().optional(),
|
|
16270
|
+
installation: harnessInstallationGuideSchema.optional(),
|
|
16271
|
+
notice: localizedTextSchema.optional(),
|
|
16067
16272
|
/** The factory accepts a persisted local entrypoint through its construction context. */
|
|
16068
16273
|
launchCommand: external_exports.literal(true).optional(),
|
|
16069
16274
|
links: external_exports.object({
|
|
16275
|
+
website: documentationUrlSchema.optional(),
|
|
16070
16276
|
documentation: documentationUrlSchema.optional(),
|
|
16071
16277
|
installation: documentationUrlSchema.optional()
|
|
16072
16278
|
}).strict().optional()
|
|
@@ -16480,6 +16686,11 @@ var codexSshDraftSchema = external_exports.strictObject({
|
|
|
16480
16686
|
});
|
|
16481
16687
|
var remoteConnectionsRequestSchema = external_exports.discriminatedUnion("action", [
|
|
16482
16688
|
external_exports.strictObject({ action: external_exports.literal("list") }),
|
|
16689
|
+
external_exports.strictObject({
|
|
16690
|
+
action: external_exports.literal("read-thread"),
|
|
16691
|
+
hostId: hostId.refine((id) => id !== "local"),
|
|
16692
|
+
input: delegationReadParamsSchema
|
|
16693
|
+
}),
|
|
16483
16694
|
external_exports.strictObject({
|
|
16484
16695
|
action: external_exports.literal("save"),
|
|
16485
16696
|
draft: codexSshDraftSchema,
|
|
@@ -16772,14 +16983,14 @@ function createConsoleHarnesses(roots, environment = process.env) {
|
|
|
16772
16983
|
return {
|
|
16773
16984
|
list,
|
|
16774
16985
|
async setLaunchPath(id, value) {
|
|
16775
|
-
const
|
|
16776
|
-
if (!
|
|
16777
|
-
if (!
|
|
16986
|
+
const harness2 = (await list()).find((candidate) => candidate.id === id);
|
|
16987
|
+
if (!harness2) throw new ConsoleHarnessError(404, `Harness '${id}' is not installed`);
|
|
16988
|
+
if (!harness2.launchCommand) {
|
|
16778
16989
|
throw new ConsoleHarnessError(400, `Harness '${id}' does not accept an installation path`);
|
|
16779
16990
|
}
|
|
16780
16991
|
try {
|
|
16781
16992
|
const settings = await store.set(id, value);
|
|
16782
|
-
return { ...
|
|
16993
|
+
return { ...harness2, launchPath: settings.path };
|
|
16783
16994
|
} catch (error51) {
|
|
16784
16995
|
throw new ConsoleHarnessError(400, error51 instanceof Error ? error51.message : String(error51));
|
|
16785
16996
|
}
|
|
@@ -17840,8 +18051,8 @@ function startConsoleServer(options) {
|
|
|
17840
18051
|
return;
|
|
17841
18052
|
}
|
|
17842
18053
|
try {
|
|
17843
|
-
const
|
|
17844
|
-
sendJson(response, 200, { harness });
|
|
18054
|
+
const harness2 = await options.harnesses.setLaunchPath(id, value === "" ? null : value);
|
|
18055
|
+
sendJson(response, 200, { harness: harness2 });
|
|
17845
18056
|
} catch (error51) {
|
|
17846
18057
|
sendJson(response, error51 instanceof ConsoleHarnessError ? error51.status : 500, {
|
|
17847
18058
|
error: error51 instanceof Error ? error51.message : String(error51)
|
|
@@ -17948,7 +18159,7 @@ async function consoleBuildId(entryPath2, environment = process.env) {
|
|
|
17948
18159
|
}
|
|
17949
18160
|
const runtime = await readRuntimeMetadata(entryPath2, environment).catch(() => null);
|
|
17950
18161
|
if (runtime?.distribution === "development") parts.push(runtime.version);
|
|
17951
|
-
return parts.join(".");
|
|
18162
|
+
return JSON.stringify([parts.join("."), dataDirectory(environment)]);
|
|
17952
18163
|
}
|
|
17953
18164
|
function startDetachedServer(entryPath2, environment) {
|
|
17954
18165
|
const child = spawn3(process.execPath, [entryPath2, "serve"], {
|