@dotobokuri/fleet-console 1.62.0 → 1.64.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 -0
- package/dist/cli.mjs +571 -96
- package/dist/client/assets/{_baseUniq-B6CLI4cf.js → _baseUniq-DurhRkUz.js} +1 -1
- package/dist/client/assets/{arc-r3CRqUQ5.js → arc-CRs5BdYr.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-CJfgw2eJ.js → architectureDiagram-Q4EWVU46-Djo8uCUV.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-CkBuOBUs.js → blockDiagram-DXYQGD6D-hQdc3yPb.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-Ln5TenJL.js → c4Diagram-AHTNJAMY-Czv6wUeb.js} +1 -1
- package/dist/client/assets/channel-DluRfcgW.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-BiYTw90k.js → chunk-4BX2VUAB-DXjqdOUQ.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-nPQaGu1w.js → chunk-4TB4RGXK-vvWT5R7G.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-BU2oCJkl.js → chunk-55IACEB6-DMDBDn4n.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-Ej7y6KOv.js → chunk-EDXVE4YY-CvZM4UpD.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-hOkBpfhE.js → chunk-FMBD7UC4-BArng_V9.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-Cv43HwvT.js → chunk-OYMX7WX6-DwNWyoK7.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-Bi7AEJxb.js → chunk-QZHKN3VN--guvcrYz.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-CBwmJdga.js → chunk-YZCP3GAM-BqxZQZyX.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-CwNh44Lk.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-CwNh44Lk.js +1 -0
- package/dist/client/assets/clone-ClWdaAWG.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-ERDn7bly.js → cose-bilkent-S5V4N54A-BMg_LOnu.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-DapcbnEu.js → dagre-KV5264BT-Dr7w5bQR.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-DbRBVaVH.js → diagram-5BDNPKRD-B3mTbXqP.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-CLP0MwBH.js → diagram-G4DWMVQ6-qb3u5_YF.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-BMZ9AsEI.js → diagram-MMDJMWI5-CBBgto41.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-DtPPkZ2y.js → diagram-TYMM5635-Cmo3cjOQ.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-DIvbhhTb.js → erDiagram-SMLLAGMA-HeqZPhtI.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-C_R3RpTk.js → flowDiagram-DWJPFMVM-C34ZouQN.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-eaIqpHsY.js → ganttDiagram-T4ZO3ILL-BL2_YoJe.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-CYCsHY_E.js → gitGraphDiagram-UUTBAWPF-DSC8Gr0E.js} +1 -1
- package/dist/client/assets/{graph-HfvOsgk2.js → graph-C4jsVwYI.js} +1 -1
- package/dist/client/assets/index-BuMY4qU-.js +465 -0
- package/dist/client/assets/index-DxjgOu3C.css +1 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-rmDH5YRZ.js → infoDiagram-42DDH7IO-BX_lYqHx.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-EAZO3mIY.js → ishikawaDiagram-UXIWVN3A-CsXWVwyY.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-4vWYlXOF.js → journeyDiagram-VCZTEJTY-ETPWVMNg.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-CkkSfsbD.js → kanban-definition-6JOO6SKY-m7hLIKgZ.js} +1 -1
- package/dist/client/assets/{layout-DWbhbrdO.js → layout-DrRXjJzL.js} +1 -1
- package/dist/client/assets/{linear-BjRBsqi0.js → linear-DzDd2m9j.js} +1 -1
- package/dist/client/assets/{mermaid.core-RuG-kUU2.js → mermaid.core-BHkit2JY.js} +4 -4
- package/dist/client/assets/{min-D--jZrv5.js → min-DtwEer1D.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-fLwhQBcX.js → mindmap-definition-QFDTVHPH-BO-uheb7.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-DJkWnAQK.js → pieDiagram-DEJITSTG-B_4VqNKt.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-Kd4q9kEz.js → quadrantDiagram-34T5L4WZ-HhtqXdkD.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-Bgrtq8Kh.js → requirementDiagram-MS252O5E-CSotIpLH.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-BW9BdQ-8.js → sankeyDiagram-XADWPNL6-a8krBcEy.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-KpgcxIJb.js → sequenceDiagram-FGHM5R23-D9Tlp8oT.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-CNaCHtL2.js → stateDiagram-FHFEXIEX-CbEP_Jmm.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-B9iCjiGH.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-MGPKEXGI.js → timeline-definition-GMOUNBTQ-CxAJtY22.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-bDOCVDJ1.js → vennDiagram-DHZGUBPP-BSTXi411.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-DuvLJQPg.js → wardley-RL74JXVD-BipCMOcx.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-BdBIEtIl.js → wardleyDiagram-NUSXRM2D-BudrJ8a1.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-vycMI6c3.js → xychartDiagram-5P7HB3ND-BYlMZf2g.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/ledger/routes.mjs +265 -12
- package/dist/fleet-plugins/quota/routes.mjs +265 -12
- package/dist/fleet-plugins/scuttlebutt/routes.mjs +545 -79
- package/dist/fleet-plugins/terminal/routes.mjs +1150 -237
- package/dist/fleet.mjs +954 -300
- package/package.json +1 -1
- package/dist/client/assets/channel-DBCxCWtI.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-QQSWiJjR.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-QQSWiJjR.js +0 -1
- package/dist/client/assets/clone-vom5rXcJ.js +0 -1
- package/dist/client/assets/index-C2erdgSj.css +0 -1
- package/dist/client/assets/index-CrEYBugN.js +0 -465
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-D3k4sLJ4.js +0 -1
package/dist/fleet.mjs
CHANGED
|
@@ -4,10 +4,10 @@ import os3__default, { tmpdir } from 'node:os';
|
|
|
4
4
|
import * as path24 from 'node:path';
|
|
5
5
|
import path24__default, { join, resolve, relative, sep } from 'node:path';
|
|
6
6
|
import * as fs9 from 'node:fs';
|
|
7
|
-
import fs9__default, { mkdirSync, mkdtempSync, writeFileSync, rmSync, chmodSync, renameSync, readdirSync,
|
|
7
|
+
import fs9__default, { mkdirSync, mkdtempSync, writeFileSync, rmSync, chmodSync, renameSync, readdirSync, existsSync, lstatSync, accessSync, constants as constants$1, realpathSync, openSync, closeSync, readFileSync } from 'node:fs';
|
|
8
8
|
import crypto9, { randomUUID as randomUUID$1, createHash as createHash$1 } from 'node:crypto';
|
|
9
9
|
import http from 'node:http';
|
|
10
|
-
import { spawn, execFileSync } from 'node:child_process';
|
|
10
|
+
import { spawn, execFileSync, execFile as execFile$1 } from 'node:child_process';
|
|
11
11
|
import { builtinModules, createRequire } from 'node:module';
|
|
12
12
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
13
13
|
import * as fs32 from 'fs';
|
|
@@ -1536,6 +1536,40 @@ var init_check = __esm({
|
|
|
1536
1536
|
init_registry2();
|
|
1537
1537
|
}
|
|
1538
1538
|
});
|
|
1539
|
+
|
|
1540
|
+
// cli/update/check-report.ts
|
|
1541
|
+
var check_report_exports = {};
|
|
1542
|
+
__export(check_report_exports, {
|
|
1543
|
+
runFleetUpdateCheck: () => runFleetUpdateCheck
|
|
1544
|
+
});
|
|
1545
|
+
async function runFleetUpdateCheck(io) {
|
|
1546
|
+
const release = readFleetCliRelease();
|
|
1547
|
+
if (release.channel === "local") {
|
|
1548
|
+
io.stdout.write(`Fleet is running from a local development build (v${release.version}) \u2014 nothing to update here.
|
|
1549
|
+
`);
|
|
1550
|
+
return 0;
|
|
1551
|
+
}
|
|
1552
|
+
const result = await checkUpdateStatus(release, { forceRefresh: true }).catch(() => ({ status: "unavailable" }));
|
|
1553
|
+
if (result.status === "current") {
|
|
1554
|
+
io.stdout.write(`Fleet is already on the latest version (v${release.version}).
|
|
1555
|
+
`);
|
|
1556
|
+
return 0;
|
|
1557
|
+
}
|
|
1558
|
+
if (result.status === "update") {
|
|
1559
|
+
io.stdout.write(`A newer Fleet version is available: v${result.latest} (installed v${release.version}).
|
|
1560
|
+
Run fleet update to install it.
|
|
1561
|
+
`);
|
|
1562
|
+
return 0;
|
|
1563
|
+
}
|
|
1564
|
+
io.stdout.write("Could not reach the npm registry to check for updates.\n");
|
|
1565
|
+
return 1;
|
|
1566
|
+
}
|
|
1567
|
+
var init_check_report = __esm({
|
|
1568
|
+
"cli/update/check-report.ts"() {
|
|
1569
|
+
init_release();
|
|
1570
|
+
init_check();
|
|
1571
|
+
}
|
|
1572
|
+
});
|
|
1539
1573
|
async function stopRunningConsoleBeforeUpdate(io, deps = {}) {
|
|
1540
1574
|
const env = deps.env ?? process.env;
|
|
1541
1575
|
const siblingCliPath = deps.siblingCliPath ?? resolveSiblingConsoleCliPath();
|
|
@@ -21905,8 +21939,8 @@ function isClaudeTextBlock(block) {
|
|
|
21905
21939
|
}
|
|
21906
21940
|
function claudeSkillNameFromBody(text) {
|
|
21907
21941
|
const breakAt = text.indexOf("\n");
|
|
21908
|
-
const
|
|
21909
|
-
const directory =
|
|
21942
|
+
const firstLine2 = breakAt === -1 ? text : text.slice(0, breakAt);
|
|
21943
|
+
const directory = firstLine2.slice(CLAUDE_SKILL_BODY_PREFIX.length).trim();
|
|
21910
21944
|
const segments = directory.split("/").filter((segment) => segment.length > 0);
|
|
21911
21945
|
return segments[segments.length - 1] ?? "";
|
|
21912
21946
|
}
|
|
@@ -22188,12 +22222,12 @@ var benchmarks_default = {
|
|
|
22188
22222
|
};
|
|
22189
22223
|
var models_default = {
|
|
22190
22224
|
version: 1,
|
|
22191
|
-
updatedAt: "2026-08-
|
|
22225
|
+
updatedAt: "2026-08-17T00:00:00Z",
|
|
22192
22226
|
providers: {
|
|
22193
22227
|
codex: {
|
|
22194
22228
|
name: "Codex",
|
|
22195
22229
|
defaultModel: "gpt-5.6-sol",
|
|
22196
|
-
source: "codex app-server model/list (codex-cli 0.147.0, 2026-08-11
|
|
22230
|
+
source: "codex app-server model/list (codex-cli 0.147.0, observed 2026-08-11) for model/effort/service-tier and the unsuffixed 272000 defaults; Fleet catalog effort ladders are capped at max because harness launch capabilities are not model rungs; 2026-08-17 production Codex live observations added explicit 512K (524288) and explicit 1M (1000000) variants on the same upstream bases",
|
|
22197
22231
|
models: [
|
|
22198
22232
|
{
|
|
22199
22233
|
modelId: "gpt-5.6-sol",
|
|
@@ -22207,8 +22241,7 @@ var models_default = {
|
|
|
22207
22241
|
"medium",
|
|
22208
22242
|
"high",
|
|
22209
22243
|
"xhigh",
|
|
22210
|
-
"max"
|
|
22211
|
-
"ultra"
|
|
22244
|
+
"max"
|
|
22212
22245
|
]
|
|
22213
22246
|
},
|
|
22214
22247
|
aliases: [
|
|
@@ -22230,8 +22263,7 @@ var models_default = {
|
|
|
22230
22263
|
"medium",
|
|
22231
22264
|
"high",
|
|
22232
22265
|
"xhigh",
|
|
22233
|
-
"max"
|
|
22234
|
-
"ultra"
|
|
22266
|
+
"max"
|
|
22235
22267
|
]
|
|
22236
22268
|
},
|
|
22237
22269
|
aliases: [
|
|
@@ -22251,8 +22283,7 @@ var models_default = {
|
|
|
22251
22283
|
"medium",
|
|
22252
22284
|
"high",
|
|
22253
22285
|
"xhigh",
|
|
22254
|
-
"max"
|
|
22255
|
-
"ultra"
|
|
22286
|
+
"max"
|
|
22256
22287
|
]
|
|
22257
22288
|
},
|
|
22258
22289
|
aliases: [
|
|
@@ -22274,8 +22305,7 @@ var models_default = {
|
|
|
22274
22305
|
"medium",
|
|
22275
22306
|
"high",
|
|
22276
22307
|
"xhigh",
|
|
22277
|
-
"max"
|
|
22278
|
-
"ultra"
|
|
22308
|
+
"max"
|
|
22279
22309
|
]
|
|
22280
22310
|
},
|
|
22281
22311
|
aliases: [
|
|
@@ -22324,6 +22354,264 @@ var models_default = {
|
|
|
22324
22354
|
"gpt-5.6-luna-fast"
|
|
22325
22355
|
],
|
|
22326
22356
|
benchmarkKey: "gpt-5.6-luna"
|
|
22357
|
+
},
|
|
22358
|
+
{
|
|
22359
|
+
modelId: "gpt-5.6-sol-512k",
|
|
22360
|
+
name: "GPT-5.6-Sol-512K",
|
|
22361
|
+
capabilityClass: "flagship",
|
|
22362
|
+
providerModelId: "gpt-5.6-sol",
|
|
22363
|
+
contextWindow: 524288,
|
|
22364
|
+
effort: {
|
|
22365
|
+
supported: true,
|
|
22366
|
+
levels: [
|
|
22367
|
+
"low",
|
|
22368
|
+
"medium",
|
|
22369
|
+
"high",
|
|
22370
|
+
"xhigh",
|
|
22371
|
+
"max"
|
|
22372
|
+
]
|
|
22373
|
+
},
|
|
22374
|
+
aliases: [
|
|
22375
|
+
"gpt-5.6-sol-512k"
|
|
22376
|
+
],
|
|
22377
|
+
benchmarkKey: "gpt-5.6-sol"
|
|
22378
|
+
},
|
|
22379
|
+
{
|
|
22380
|
+
modelId: "gpt-5.6-sol-512k-fast",
|
|
22381
|
+
name: "GPT-5.6-Sol-512K-Fast",
|
|
22382
|
+
capabilityClass: "flagship",
|
|
22383
|
+
providerModelId: "gpt-5.6-sol",
|
|
22384
|
+
serviceTier: "priority",
|
|
22385
|
+
contextWindow: 524288,
|
|
22386
|
+
effort: {
|
|
22387
|
+
supported: true,
|
|
22388
|
+
levels: [
|
|
22389
|
+
"low",
|
|
22390
|
+
"medium",
|
|
22391
|
+
"high",
|
|
22392
|
+
"xhigh",
|
|
22393
|
+
"max"
|
|
22394
|
+
]
|
|
22395
|
+
},
|
|
22396
|
+
aliases: [
|
|
22397
|
+
"gpt-5.6-sol-512k-fast"
|
|
22398
|
+
],
|
|
22399
|
+
benchmarkKey: "gpt-5.6-sol"
|
|
22400
|
+
},
|
|
22401
|
+
{
|
|
22402
|
+
modelId: "gpt-5.6-luna-512k",
|
|
22403
|
+
name: "GPT-5.6-Luna-512K",
|
|
22404
|
+
capabilityClass: "light",
|
|
22405
|
+
providerModelId: "gpt-5.6-luna",
|
|
22406
|
+
contextWindow: 524288,
|
|
22407
|
+
effort: {
|
|
22408
|
+
supported: true,
|
|
22409
|
+
levels: [
|
|
22410
|
+
"low",
|
|
22411
|
+
"medium",
|
|
22412
|
+
"high",
|
|
22413
|
+
"xhigh",
|
|
22414
|
+
"max"
|
|
22415
|
+
]
|
|
22416
|
+
},
|
|
22417
|
+
aliases: [
|
|
22418
|
+
"gpt-5.6-luna-512k"
|
|
22419
|
+
],
|
|
22420
|
+
benchmarkKey: "gpt-5.6-luna"
|
|
22421
|
+
},
|
|
22422
|
+
{
|
|
22423
|
+
modelId: "gpt-5.6-luna-512k-fast",
|
|
22424
|
+
name: "GPT-5.6-Luna-512K-Fast",
|
|
22425
|
+
capabilityClass: "light",
|
|
22426
|
+
providerModelId: "gpt-5.6-luna",
|
|
22427
|
+
serviceTier: "priority",
|
|
22428
|
+
contextWindow: 524288,
|
|
22429
|
+
effort: {
|
|
22430
|
+
supported: true,
|
|
22431
|
+
levels: [
|
|
22432
|
+
"low",
|
|
22433
|
+
"medium",
|
|
22434
|
+
"high",
|
|
22435
|
+
"xhigh",
|
|
22436
|
+
"max"
|
|
22437
|
+
]
|
|
22438
|
+
},
|
|
22439
|
+
aliases: [
|
|
22440
|
+
"gpt-5.6-luna-512k-fast"
|
|
22441
|
+
],
|
|
22442
|
+
benchmarkKey: "gpt-5.6-luna"
|
|
22443
|
+
},
|
|
22444
|
+
{
|
|
22445
|
+
modelId: "gpt-5.6-terra-512k",
|
|
22446
|
+
name: "GPT-5.6-Terra-512K",
|
|
22447
|
+
capabilityClass: "standard",
|
|
22448
|
+
providerModelId: "gpt-5.6-terra",
|
|
22449
|
+
contextWindow: 524288,
|
|
22450
|
+
effort: {
|
|
22451
|
+
supported: true,
|
|
22452
|
+
levels: [
|
|
22453
|
+
"low",
|
|
22454
|
+
"medium",
|
|
22455
|
+
"high",
|
|
22456
|
+
"xhigh",
|
|
22457
|
+
"max"
|
|
22458
|
+
]
|
|
22459
|
+
},
|
|
22460
|
+
aliases: [
|
|
22461
|
+
"gpt-5.6-terra-512k"
|
|
22462
|
+
],
|
|
22463
|
+
benchmarkKey: "gpt-5.6-terra"
|
|
22464
|
+
},
|
|
22465
|
+
{
|
|
22466
|
+
modelId: "gpt-5.6-terra-512k-fast",
|
|
22467
|
+
name: "GPT-5.6-Terra-512K-Fast",
|
|
22468
|
+
capabilityClass: "standard",
|
|
22469
|
+
providerModelId: "gpt-5.6-terra",
|
|
22470
|
+
serviceTier: "priority",
|
|
22471
|
+
contextWindow: 524288,
|
|
22472
|
+
effort: {
|
|
22473
|
+
supported: true,
|
|
22474
|
+
levels: [
|
|
22475
|
+
"low",
|
|
22476
|
+
"medium",
|
|
22477
|
+
"high",
|
|
22478
|
+
"xhigh",
|
|
22479
|
+
"max"
|
|
22480
|
+
]
|
|
22481
|
+
},
|
|
22482
|
+
aliases: [
|
|
22483
|
+
"gpt-5.6-terra-512k-fast"
|
|
22484
|
+
],
|
|
22485
|
+
benchmarkKey: "gpt-5.6-terra"
|
|
22486
|
+
},
|
|
22487
|
+
{
|
|
22488
|
+
modelId: "gpt-5.6-sol-1m",
|
|
22489
|
+
name: "GPT-5.6-Sol-1M",
|
|
22490
|
+
capabilityClass: "flagship",
|
|
22491
|
+
providerModelId: "gpt-5.6-sol",
|
|
22492
|
+
contextWindow: 1e6,
|
|
22493
|
+
effort: {
|
|
22494
|
+
supported: true,
|
|
22495
|
+
levels: [
|
|
22496
|
+
"low",
|
|
22497
|
+
"medium",
|
|
22498
|
+
"high",
|
|
22499
|
+
"xhigh",
|
|
22500
|
+
"max"
|
|
22501
|
+
]
|
|
22502
|
+
},
|
|
22503
|
+
aliases: [
|
|
22504
|
+
"gpt-5.6-sol-1m"
|
|
22505
|
+
],
|
|
22506
|
+
benchmarkKey: "gpt-5.6-sol"
|
|
22507
|
+
},
|
|
22508
|
+
{
|
|
22509
|
+
modelId: "gpt-5.6-sol-1m-fast",
|
|
22510
|
+
name: "GPT-5.6-Sol-1M-Fast",
|
|
22511
|
+
capabilityClass: "flagship",
|
|
22512
|
+
providerModelId: "gpt-5.6-sol",
|
|
22513
|
+
serviceTier: "priority",
|
|
22514
|
+
contextWindow: 1e6,
|
|
22515
|
+
effort: {
|
|
22516
|
+
supported: true,
|
|
22517
|
+
levels: [
|
|
22518
|
+
"low",
|
|
22519
|
+
"medium",
|
|
22520
|
+
"high",
|
|
22521
|
+
"xhigh",
|
|
22522
|
+
"max"
|
|
22523
|
+
]
|
|
22524
|
+
},
|
|
22525
|
+
aliases: [
|
|
22526
|
+
"gpt-5.6-sol-1m-fast"
|
|
22527
|
+
],
|
|
22528
|
+
benchmarkKey: "gpt-5.6-sol"
|
|
22529
|
+
},
|
|
22530
|
+
{
|
|
22531
|
+
modelId: "gpt-5.6-luna-1m",
|
|
22532
|
+
name: "GPT-5.6-Luna-1M",
|
|
22533
|
+
capabilityClass: "light",
|
|
22534
|
+
providerModelId: "gpt-5.6-luna",
|
|
22535
|
+
contextWindow: 1e6,
|
|
22536
|
+
effort: {
|
|
22537
|
+
supported: true,
|
|
22538
|
+
levels: [
|
|
22539
|
+
"low",
|
|
22540
|
+
"medium",
|
|
22541
|
+
"high",
|
|
22542
|
+
"xhigh",
|
|
22543
|
+
"max"
|
|
22544
|
+
]
|
|
22545
|
+
},
|
|
22546
|
+
aliases: [
|
|
22547
|
+
"gpt-5.6-luna-1m"
|
|
22548
|
+
],
|
|
22549
|
+
benchmarkKey: "gpt-5.6-luna"
|
|
22550
|
+
},
|
|
22551
|
+
{
|
|
22552
|
+
modelId: "gpt-5.6-luna-1m-fast",
|
|
22553
|
+
name: "GPT-5.6-Luna-1M-Fast",
|
|
22554
|
+
capabilityClass: "light",
|
|
22555
|
+
providerModelId: "gpt-5.6-luna",
|
|
22556
|
+
serviceTier: "priority",
|
|
22557
|
+
contextWindow: 1e6,
|
|
22558
|
+
effort: {
|
|
22559
|
+
supported: true,
|
|
22560
|
+
levels: [
|
|
22561
|
+
"low",
|
|
22562
|
+
"medium",
|
|
22563
|
+
"high",
|
|
22564
|
+
"xhigh",
|
|
22565
|
+
"max"
|
|
22566
|
+
]
|
|
22567
|
+
},
|
|
22568
|
+
aliases: [
|
|
22569
|
+
"gpt-5.6-luna-1m-fast"
|
|
22570
|
+
],
|
|
22571
|
+
benchmarkKey: "gpt-5.6-luna"
|
|
22572
|
+
},
|
|
22573
|
+
{
|
|
22574
|
+
modelId: "gpt-5.6-terra-1m",
|
|
22575
|
+
name: "GPT-5.6-Terra-1M",
|
|
22576
|
+
capabilityClass: "standard",
|
|
22577
|
+
providerModelId: "gpt-5.6-terra",
|
|
22578
|
+
contextWindow: 1e6,
|
|
22579
|
+
effort: {
|
|
22580
|
+
supported: true,
|
|
22581
|
+
levels: [
|
|
22582
|
+
"low",
|
|
22583
|
+
"medium",
|
|
22584
|
+
"high",
|
|
22585
|
+
"xhigh",
|
|
22586
|
+
"max"
|
|
22587
|
+
]
|
|
22588
|
+
},
|
|
22589
|
+
aliases: [
|
|
22590
|
+
"gpt-5.6-terra-1m"
|
|
22591
|
+
],
|
|
22592
|
+
benchmarkKey: "gpt-5.6-terra"
|
|
22593
|
+
},
|
|
22594
|
+
{
|
|
22595
|
+
modelId: "gpt-5.6-terra-1m-fast",
|
|
22596
|
+
name: "GPT-5.6-Terra-1M-Fast",
|
|
22597
|
+
capabilityClass: "standard",
|
|
22598
|
+
providerModelId: "gpt-5.6-terra",
|
|
22599
|
+
serviceTier: "priority",
|
|
22600
|
+
contextWindow: 1e6,
|
|
22601
|
+
effort: {
|
|
22602
|
+
supported: true,
|
|
22603
|
+
levels: [
|
|
22604
|
+
"low",
|
|
22605
|
+
"medium",
|
|
22606
|
+
"high",
|
|
22607
|
+
"xhigh",
|
|
22608
|
+
"max"
|
|
22609
|
+
]
|
|
22610
|
+
},
|
|
22611
|
+
aliases: [
|
|
22612
|
+
"gpt-5.6-terra-1m-fast"
|
|
22613
|
+
],
|
|
22614
|
+
benchmarkKey: "gpt-5.6-terra"
|
|
22327
22615
|
}
|
|
22328
22616
|
]
|
|
22329
22617
|
},
|
|
@@ -22807,8 +23095,7 @@ var GATEWAY_REASONING_EFFORTS = [
|
|
|
22807
23095
|
"medium",
|
|
22808
23096
|
"high",
|
|
22809
23097
|
"xhigh",
|
|
22810
|
-
"max"
|
|
22811
|
-
"ultra"
|
|
23098
|
+
"max"
|
|
22812
23099
|
];
|
|
22813
23100
|
var GatewayEffortUpstreamModelIdsSchema = external_exports.partialRecord(
|
|
22814
23101
|
external_exports.enum(GATEWAY_REASONING_EFFORTS),
|
|
@@ -23235,8 +23522,7 @@ var ANTHROPIC_EFFORT_RUNGS = /* @__PURE__ */ new Set([
|
|
|
23235
23522
|
"medium",
|
|
23236
23523
|
"high",
|
|
23237
23524
|
"xhigh",
|
|
23238
|
-
"max"
|
|
23239
|
-
"ultra"
|
|
23525
|
+
"max"
|
|
23240
23526
|
]);
|
|
23241
23527
|
function freezeGatewayModelEffort(effort) {
|
|
23242
23528
|
if (!effort?.supported) return UNSUPPORTED_GATEWAY_MODEL_EFFORT;
|
|
@@ -33957,11 +34243,10 @@ var GENERAL_PURPOSE_AGENT_PROMPT = [
|
|
|
33957
34243
|
].join("\n");
|
|
33958
34244
|
var FLEET_PLUGIN_NAME = "fleet";
|
|
33959
34245
|
function exposedEffortLadder(modelId, ladder, exposure) {
|
|
33960
|
-
const deliverable = ladder.filter((rung) => rung !== "ultra");
|
|
33961
34246
|
const chosen = exposure?.[modelId];
|
|
33962
|
-
if (chosen === void 0 || chosen.length === 0) return
|
|
33963
|
-
const narrowed =
|
|
33964
|
-
return narrowed.length > 0 ? narrowed :
|
|
34247
|
+
if (chosen === void 0 || chosen.length === 0) return ladder;
|
|
34248
|
+
const narrowed = ladder.filter((rung) => chosen.includes(rung));
|
|
34249
|
+
return narrowed.length > 0 ? narrowed : ladder;
|
|
33965
34250
|
}
|
|
33966
34251
|
function buildGatewayCustomAgents(exposed, exposure) {
|
|
33967
34252
|
const agents = {};
|
|
@@ -37201,9 +37486,9 @@ async function writeAtomic(filePath, content, paths) {
|
|
|
37201
37486
|
await rename(tempPath, filePath);
|
|
37202
37487
|
}
|
|
37203
37488
|
function summarizeWikiEntry(body2) {
|
|
37204
|
-
const
|
|
37205
|
-
if (!
|
|
37206
|
-
return normalizeSummaryWhitespace(
|
|
37489
|
+
const firstLine2 = body2.split(/\r?\n/).map((line) => line.trim()).find((line) => line.length > 0);
|
|
37490
|
+
if (!firstLine2) return "";
|
|
37491
|
+
return normalizeSummaryWhitespace(firstLine2).slice(0, 160);
|
|
37207
37492
|
}
|
|
37208
37493
|
function normalizeSummaryWhitespace(value) {
|
|
37209
37494
|
return value.replace(/\s+/g, " ").trim();
|
|
@@ -46969,9 +47254,11 @@ var AUTH_CLI_OPTIONS = Object.keys(AUTH_CLI_DEFINITIONS).map((value) => ({
|
|
|
46969
47254
|
label: AUTH_CLI_DEFINITIONS[value].label
|
|
46970
47255
|
}));
|
|
46971
47256
|
async function runAuthLoginFlow(argv, io, deps) {
|
|
46972
|
-
const selectedCli =
|
|
46973
|
-
if (
|
|
46974
|
-
const
|
|
47257
|
+
const selectedCli = resolveAuthCliId(argv[0], io);
|
|
47258
|
+
if (selectedCli === "invalid") return 1;
|
|
47259
|
+
const chosen = selectedCli ?? await promptForCli();
|
|
47260
|
+
if (!chosen) return cancelAuthCommand();
|
|
47261
|
+
const definition = AUTH_CLI_DEFINITIONS[chosen];
|
|
46975
47262
|
const apiKey = await Ce({
|
|
46976
47263
|
message: `Enter the ${definition.shortName} API key`,
|
|
46977
47264
|
mask: "*"
|
|
@@ -46996,6 +47283,15 @@ function getAuthCliOptions() {
|
|
|
46996
47283
|
function parseAuthCliId(value) {
|
|
46997
47284
|
return value !== void 0 && value in AUTH_CLI_DEFINITIONS ? value : void 0;
|
|
46998
47285
|
}
|
|
47286
|
+
function resolveAuthCliId(value, io) {
|
|
47287
|
+
if (value === void 0) return void 0;
|
|
47288
|
+
const parsed = parseAuthCliId(value);
|
|
47289
|
+
if (parsed) return parsed;
|
|
47290
|
+
io.stderr.write(`Unknown fleet auth provider: ${value}
|
|
47291
|
+
Use kimi or opencode.
|
|
47292
|
+
`);
|
|
47293
|
+
return "invalid";
|
|
47294
|
+
}
|
|
46999
47295
|
async function promptForCli() {
|
|
47000
47296
|
const selected = await xe({
|
|
47001
47297
|
message: "Select an authentication provider",
|
|
@@ -47049,12 +47345,14 @@ async function listAuthProviders(io, deps) {
|
|
|
47049
47345
|
return 0;
|
|
47050
47346
|
}
|
|
47051
47347
|
async function logoutAuthProvider(argv, io, deps) {
|
|
47052
|
-
const selectedCli =
|
|
47053
|
-
if (
|
|
47348
|
+
const selectedCli = resolveAuthCliId(argv[0], io);
|
|
47349
|
+
if (selectedCli === "invalid") return 1;
|
|
47350
|
+
const chosen = selectedCli ?? await promptForLogoutCli();
|
|
47351
|
+
if (!chosen) {
|
|
47054
47352
|
me("Authentication cancelled.");
|
|
47055
47353
|
return 1;
|
|
47056
47354
|
}
|
|
47057
|
-
const definition = AUTH_CLI_DEFINITIONS[
|
|
47355
|
+
const definition = AUTH_CLI_DEFINITIONS[chosen];
|
|
47058
47356
|
await deps.authService.deleteApiKey(definition.providerId);
|
|
47059
47357
|
io.stdout.write(`${definition.label} signed out.
|
|
47060
47358
|
`);
|
|
@@ -47121,6 +47419,14 @@ var ASCII_FLEET_BANNER = [
|
|
|
47121
47419
|
|
|
47122
47420
|
// cli/cli-args.ts
|
|
47123
47421
|
init_release();
|
|
47422
|
+
function isFleetVersionArg(value) {
|
|
47423
|
+
return value === "--version" || value === "-v" || value === "version";
|
|
47424
|
+
}
|
|
47425
|
+
function buildFleetVersionText(release = readFleetCliRelease()) {
|
|
47426
|
+
return `@dotobokuri/fleet-console ${release.version} (${release.channel})
|
|
47427
|
+
Claude Code version: fleet cli --version
|
|
47428
|
+
`;
|
|
47429
|
+
}
|
|
47124
47430
|
var HELP_BANNER_INDENT = " ";
|
|
47125
47431
|
function buildFleetHelpText(options = {}) {
|
|
47126
47432
|
const release = options.release ?? readFleetCliRelease();
|
|
@@ -47137,16 +47443,23 @@ function buildFleetHelpText(options = {}) {
|
|
|
47137
47443
|
` ${command("fleet cli", colorEnabled)} ${dim("[claude args...]", colorEnabled)}`,
|
|
47138
47444
|
` ${command("fleet console", colorEnabled)} ${dim("[start|stop|restart|status] [--help]", colorEnabled)}`,
|
|
47139
47445
|
` ${command("fleet auth", colorEnabled)} ${dim("login|list|logout", colorEnabled)}`,
|
|
47140
|
-
` ${command("fleet update", colorEnabled)}`,
|
|
47446
|
+
` ${command("fleet update", colorEnabled)} ${dim("[--check]", colorEnabled)}`,
|
|
47447
|
+
` ${command("fleet version", colorEnabled)}`,
|
|
47448
|
+
` ${command("fleet doctor", colorEnabled)}`,
|
|
47449
|
+
` ${command("fleet status", colorEnabled)}`,
|
|
47141
47450
|
"",
|
|
47142
47451
|
section("COMMANDS", colorEnabled),
|
|
47143
47452
|
` ${command("cli", colorEnabled)} ${dim("Launch Claude Code through the thin Fleet gateway (synonym of bare fleet).", colorEnabled)}`,
|
|
47144
47453
|
` ${command("console", colorEnabled)} ${dim("Manage the local Fleet Console server.", colorEnabled)}`,
|
|
47145
47454
|
` ${command("auth", colorEnabled)} ${dim("Manage AI Gateway provider authentication.", colorEnabled)}`,
|
|
47146
47455
|
` ${command("update", colorEnabled)} ${dim("Update the Fleet Console package (owns fleet and fleet-console).", colorEnabled)}`,
|
|
47456
|
+
` ${command("version", colorEnabled)} ${dim("Print the Fleet package version and exit.", colorEnabled)}`,
|
|
47457
|
+
` ${command("doctor", colorEnabled)} ${dim("Report install, PATH, auth, and Console health without changing anything.", colorEnabled)}`,
|
|
47458
|
+
` ${command("status", colorEnabled)} ${dim("Show the local Fleet Console server status (same as fleet console status).", colorEnabled)}`,
|
|
47147
47459
|
"",
|
|
47148
47460
|
section("OPTIONS", colorEnabled),
|
|
47149
47461
|
` ${option("-h, --help", colorEnabled)} ${dim("Show this help message and exit.", colorEnabled)}`,
|
|
47462
|
+
` ${option("-v, --version", colorEnabled)} ${dim("Print the Fleet package version and exit.", colorEnabled)}`,
|
|
47150
47463
|
` ${dim("Unrecognized arguments are passed through to Claude Code.", colorEnabled)}`,
|
|
47151
47464
|
""
|
|
47152
47465
|
];
|
|
@@ -47154,6 +47467,196 @@ function buildFleetHelpText(options = {}) {
|
|
|
47154
47467
|
return colorEnabled ? text : stripAnsi(text);
|
|
47155
47468
|
}
|
|
47156
47469
|
|
|
47470
|
+
// cli/doctor.ts
|
|
47471
|
+
init_src();
|
|
47472
|
+
init_release();
|
|
47473
|
+
var DESKTOP_PROTOCOL_VERSION = 1;
|
|
47474
|
+
var DESKTOP_RESOURCE_ROOT_ENV = "FLEET_CONSOLE_RESOURCE_ROOT";
|
|
47475
|
+
var DESKTOP_OWNER_ID_ENV = "FLEET_CONSOLE_OWNER_ID";
|
|
47476
|
+
var DESKTOP_OWNER_KIND_ENV = "FLEET_CONSOLE_OWNER_KIND";
|
|
47477
|
+
var DESKTOP_PROTOCOL_VERSION_ENV = "FLEET_CONSOLE_PROTOCOL_VERSION";
|
|
47478
|
+
var DESKTOP_RESOURCE_ROOT_MARKER = ".fleet-console-resource-root";
|
|
47479
|
+
var DESKTOP_DEVELOPMENT_ENV = "FLEET_CONSOLE_DESKTOP_DEVELOPMENT";
|
|
47480
|
+
var LOCK_DIR_NAME3 = "fleet-console";
|
|
47481
|
+
var LOCK_FILE_NAME = "console.lock";
|
|
47482
|
+
var CONSOLE_DATA_DIR_NAME = "console";
|
|
47483
|
+
var CONSOLE_STATE_FILE_NAME = "state.json";
|
|
47484
|
+
var CONSOLE_SETTINGS_FILE_NAME = "settings.json";
|
|
47485
|
+
var CONSOLE_CAPTURES_DIR_NAME = "captures";
|
|
47486
|
+
function isDesktopDevelopmentEnvironment(env) {
|
|
47487
|
+
return env[DESKTOP_DEVELOPMENT_ENV] === "1";
|
|
47488
|
+
}
|
|
47489
|
+
function resolveCanonicalStableConsolePaths(input) {
|
|
47490
|
+
const dir = input.consoleDirOverride ?? path24__default.join(input.tmpDir, `${LOCK_DIR_NAME3}-${input.uid}-stable`);
|
|
47491
|
+
const dataDir = input.consoleDirOverride ?? path24__default.join(input.fleetDataDir, CONSOLE_DATA_DIR_NAME);
|
|
47492
|
+
return {
|
|
47493
|
+
dir,
|
|
47494
|
+
lockFile: path24__default.join(dir, LOCK_FILE_NAME),
|
|
47495
|
+
dataDir,
|
|
47496
|
+
stateFile: path24__default.join(dataDir, CONSOLE_STATE_FILE_NAME),
|
|
47497
|
+
settingsFile: path24__default.join(dataDir, CONSOLE_SETTINGS_FILE_NAME),
|
|
47498
|
+
capturesDir: path24__default.join(dataDir, CONSOLE_CAPTURES_DIR_NAME)
|
|
47499
|
+
};
|
|
47500
|
+
}
|
|
47501
|
+
function resolveCanonicalLocalConsolePaths(input) {
|
|
47502
|
+
const dir = path24__default.join(path24__default.resolve(input.packageRoot, "..", ".."), ".fleet", CONSOLE_DATA_DIR_NAME);
|
|
47503
|
+
return {
|
|
47504
|
+
dir,
|
|
47505
|
+
lockFile: path24__default.join(dir, LOCK_FILE_NAME),
|
|
47506
|
+
dataDir: dir,
|
|
47507
|
+
stateFile: path24__default.join(dir, CONSOLE_STATE_FILE_NAME),
|
|
47508
|
+
settingsFile: path24__default.join(dir, CONSOLE_SETTINGS_FILE_NAME),
|
|
47509
|
+
capturesDir: path24__default.join(dir, CONSOLE_CAPTURES_DIR_NAME)
|
|
47510
|
+
};
|
|
47511
|
+
}
|
|
47512
|
+
function isDesktopResourceRootMarkerValid(content) {
|
|
47513
|
+
return content.trim() === String(DESKTOP_PROTOCOL_VERSION);
|
|
47514
|
+
}
|
|
47515
|
+
|
|
47516
|
+
// core/host/desktop-protocol.ts
|
|
47517
|
+
function readDesktopProtocolEnvironment(env = process.env, deps = {}) {
|
|
47518
|
+
const resourceRoot = env[DESKTOP_RESOURCE_ROOT_ENV];
|
|
47519
|
+
const ownerId = env[DESKTOP_OWNER_ID_ENV];
|
|
47520
|
+
const ownerKind = env[DESKTOP_OWNER_KIND_ENV];
|
|
47521
|
+
const protocolVersion = env[DESKTOP_PROTOCOL_VERSION_ENV];
|
|
47522
|
+
const values = [resourceRoot, ownerId, ownerKind, protocolVersion];
|
|
47523
|
+
if (values.every((value) => value === void 0)) return null;
|
|
47524
|
+
if (values.some((value) => !value)) throw new Error("desktop_protocol_environment_incomplete");
|
|
47525
|
+
if (ownerKind !== "desktop") throw new Error("desktop_owner_kind_invalid");
|
|
47526
|
+
if (!isSafeOwnerId(ownerId)) throw new Error("desktop_owner_id_invalid");
|
|
47527
|
+
if (protocolVersion !== String(DESKTOP_PROTOCOL_VERSION)) throw new Error("desktop_protocol_version_unsupported");
|
|
47528
|
+
const resolvedRoot = isDesktopDevelopmentEnvironment2(env) ? validateDesktopDevelopmentResourceRoot(resourceRoot) : validateDesktopResourceRoot(resourceRoot, deps.expectedPackageRoot);
|
|
47529
|
+
return { owner: { kind: "desktop", id: ownerId, protocolVersion: DESKTOP_PROTOCOL_VERSION }, resourceRoot: resolvedRoot };
|
|
47530
|
+
}
|
|
47531
|
+
function isDesktopDevelopmentEnvironment2(env = process.env) {
|
|
47532
|
+
return isDesktopDevelopmentEnvironment(env);
|
|
47533
|
+
}
|
|
47534
|
+
function validateDesktopResourceRoot(root, expectedPackageRoot = resolveDesktopProtocolPackageRoot()) {
|
|
47535
|
+
if (!path24__default.isAbsolute(root)) throw new Error("desktop_resource_root_not_absolute");
|
|
47536
|
+
const resolvedRoot = fs9__default.realpathSync(root);
|
|
47537
|
+
const expectedRoot = fs9__default.realpathSync(expectedPackageRoot);
|
|
47538
|
+
if (resolvedRoot !== expectedRoot) throw new Error("desktop_resource_root_invalid");
|
|
47539
|
+
const markerPath = path24__default.join(resolvedRoot, DESKTOP_RESOURCE_ROOT_MARKER);
|
|
47540
|
+
const marker = fs9__default.readFileSync(markerPath, "utf8");
|
|
47541
|
+
if (!isDesktopResourceRootMarkerValid(marker)) throw new Error("desktop_resource_root_marker_invalid");
|
|
47542
|
+
return resolvedRoot;
|
|
47543
|
+
}
|
|
47544
|
+
function validateDesktopDevelopmentResourceRoot(root) {
|
|
47545
|
+
if (!path24__default.isAbsolute(root)) throw new Error("desktop_resource_root_not_absolute");
|
|
47546
|
+
let resolvedRoot;
|
|
47547
|
+
try {
|
|
47548
|
+
resolvedRoot = fs9__default.realpathSync(root);
|
|
47549
|
+
} catch {
|
|
47550
|
+
throw new Error("desktop_development_resource_root_invalid");
|
|
47551
|
+
}
|
|
47552
|
+
const expectedRoot = fs9__default.realpathSync(resolveDesktopProtocolPackageRoot());
|
|
47553
|
+
if (resolvedRoot !== expectedRoot) throw new Error("desktop_development_resource_root_invalid");
|
|
47554
|
+
return resolvedRoot;
|
|
47555
|
+
}
|
|
47556
|
+
function resolveDesktopProtocolPackageRoot() {
|
|
47557
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
47558
|
+
for (const candidate of ["../package.json", "../../package.json"]) {
|
|
47559
|
+
try {
|
|
47560
|
+
return path24__default.dirname(requireFromHere.resolve(candidate));
|
|
47561
|
+
} catch (error51) {
|
|
47562
|
+
if (error51.code !== "MODULE_NOT_FOUND") throw error51;
|
|
47563
|
+
}
|
|
47564
|
+
}
|
|
47565
|
+
throw new Error("fleet_console_package_json_not_found");
|
|
47566
|
+
}
|
|
47567
|
+
function isSafeOwnerId(value) {
|
|
47568
|
+
return value.length > 0 && value.length <= 256 && /^[A-Za-z0-9._-]+$/.test(value);
|
|
47569
|
+
}
|
|
47570
|
+
function readFleetConsoleRelease(env = process.env) {
|
|
47571
|
+
const desktop = readDesktopProtocolEnvironment(env);
|
|
47572
|
+
if (desktop) return readReleaseAt(desktop.resourceRoot, readPackageChannel(desktop.resourceRoot));
|
|
47573
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
47574
|
+
const packageJsonPath = resolvePackageJsonPath(requireFromHere);
|
|
47575
|
+
const packageRoot = path24__default.dirname(packageJsonPath);
|
|
47576
|
+
return readReleaseAt(packageRoot, readPackageChannel(packageRoot, requireFromHere), requireFromHere);
|
|
47577
|
+
}
|
|
47578
|
+
function readPackageChannel(packageRoot, requireFromHere = createRequire(import.meta.url)) {
|
|
47579
|
+
const pkg = requireFromHere(path24__default.join(packageRoot, "package.json"));
|
|
47580
|
+
return pkg.private === true ? "local" : "stable";
|
|
47581
|
+
}
|
|
47582
|
+
function readReleaseAt(packageRoot, channel, requireFromHere = createRequire(import.meta.url)) {
|
|
47583
|
+
const packageJsonPath = path24__default.join(packageRoot, "package.json");
|
|
47584
|
+
const pkg = requireFromHere(packageJsonPath);
|
|
47585
|
+
return { channel, version: pkg.version ?? "", packageRoot };
|
|
47586
|
+
}
|
|
47587
|
+
function resolvePackageJsonPath(requireFromHere) {
|
|
47588
|
+
for (const candidate of ["../package.json", "../../package.json"]) {
|
|
47589
|
+
try {
|
|
47590
|
+
return requireFromHere.resolve(candidate);
|
|
47591
|
+
} catch (error51) {
|
|
47592
|
+
if (error51.code !== "MODULE_NOT_FOUND") throw error51;
|
|
47593
|
+
}
|
|
47594
|
+
}
|
|
47595
|
+
throw new Error("fleet_console_package_json_not_found");
|
|
47596
|
+
}
|
|
47597
|
+
|
|
47598
|
+
// core/host/paths.ts
|
|
47599
|
+
var CONSOLE_RUNTIME_DIR_NAME = "console";
|
|
47600
|
+
var CONSOLE_DATA_DIR_NAME2 = "console";
|
|
47601
|
+
var CONSOLE_STATE_FILE_NAME2 = "state.json";
|
|
47602
|
+
var CONSOLE_SETTINGS_FILE_NAME2 = "settings.json";
|
|
47603
|
+
var CONSOLE_DATA_DIR_ENV = "FLEET_CONSOLE_DATA_DIR";
|
|
47604
|
+
var LEGACY_CONSOLE_DATA_DIR_ENV = "FLEET_CONSOLE_DIR";
|
|
47605
|
+
function readConsoleDirOverride(env) {
|
|
47606
|
+
return env[CONSOLE_DATA_DIR_ENV] ?? env[LEGACY_CONSOLE_DATA_DIR_ENV];
|
|
47607
|
+
}
|
|
47608
|
+
function createConsolePaths(deps = {}) {
|
|
47609
|
+
const env = deps.env ?? process.env;
|
|
47610
|
+
const base = readConsoleDirOverride(env) ?? defaultConsoleBaseDir(deps);
|
|
47611
|
+
return { dir: base, lockFile: path24__default.join(base, "console.lock") };
|
|
47612
|
+
}
|
|
47613
|
+
function createConsoleDataPaths(deps = {}) {
|
|
47614
|
+
const dir = defaultConsoleDataBaseDir(deps);
|
|
47615
|
+
return {
|
|
47616
|
+
dir,
|
|
47617
|
+
stateFile: path24__default.join(dir, CONSOLE_STATE_FILE_NAME2),
|
|
47618
|
+
settingsFile: path24__default.join(dir, CONSOLE_SETTINGS_FILE_NAME2)
|
|
47619
|
+
};
|
|
47620
|
+
}
|
|
47621
|
+
function defaultConsoleBaseDir(deps) {
|
|
47622
|
+
let release;
|
|
47623
|
+
const channel = deps.channel ?? (release = readFleetConsoleRelease()).channel;
|
|
47624
|
+
if (channel === "local") {
|
|
47625
|
+
const packageRoot = deps.packageRoot ?? (release ??= readFleetConsoleRelease()).packageRoot;
|
|
47626
|
+
return localConsoleDir(packageRoot);
|
|
47627
|
+
}
|
|
47628
|
+
const uid = deps.uid ?? (typeof process.getuid === "function" ? process.getuid() : 0);
|
|
47629
|
+
return resolveCanonicalStableConsolePaths({
|
|
47630
|
+
tmpDir: os3__default.tmpdir(),
|
|
47631
|
+
uid,
|
|
47632
|
+
fleetDataDir: getFleetDataDir()
|
|
47633
|
+
}).dir;
|
|
47634
|
+
}
|
|
47635
|
+
function defaultConsoleDataBaseDir(deps) {
|
|
47636
|
+
if (deps.fleetDataDir !== void 0) {
|
|
47637
|
+
return path24__default.join(deps.fleetDataDir, CONSOLE_DATA_DIR_NAME2);
|
|
47638
|
+
}
|
|
47639
|
+
const env = deps.env ?? process.env;
|
|
47640
|
+
const override = readConsoleDirOverride(env);
|
|
47641
|
+
if (override) {
|
|
47642
|
+
return override;
|
|
47643
|
+
}
|
|
47644
|
+
let release;
|
|
47645
|
+
const channel = deps.channel ?? (release = readFleetConsoleRelease()).channel;
|
|
47646
|
+
if (channel === "local") {
|
|
47647
|
+
const packageRoot = deps.packageRoot ?? (release ??= readFleetConsoleRelease()).packageRoot;
|
|
47648
|
+
return localConsoleDir(packageRoot);
|
|
47649
|
+
}
|
|
47650
|
+
return resolveCanonicalStableConsolePaths({
|
|
47651
|
+
tmpDir: os3__default.tmpdir(),
|
|
47652
|
+
uid: typeof process.getuid === "function" ? process.getuid() : 0,
|
|
47653
|
+
fleetDataDir: getFleetDataDir()
|
|
47654
|
+
}).dataDir;
|
|
47655
|
+
}
|
|
47656
|
+
function localConsoleDir(packageRoot) {
|
|
47657
|
+
return path24__default.join(path24__default.resolve(packageRoot, "..", ".."), ".fleet", CONSOLE_RUNTIME_DIR_NAME);
|
|
47658
|
+
}
|
|
47659
|
+
|
|
47157
47660
|
// core/host/console-lifecycle.ts
|
|
47158
47661
|
init_src();
|
|
47159
47662
|
var SPAWN_GRACE_MS = 250;
|
|
@@ -47269,6 +47772,9 @@ function createConsoleHealthClient(deps = {}) {
|
|
|
47269
47772
|
}
|
|
47270
47773
|
return { probe };
|
|
47271
47774
|
}
|
|
47775
|
+
|
|
47776
|
+
// core/host/console-lifecycle.ts
|
|
47777
|
+
init_release();
|
|
47272
47778
|
var LOCK_DIR_MODE = 448;
|
|
47273
47779
|
var LOCK_FILE_MODE = 384;
|
|
47274
47780
|
function createConsoleLock(deps = {}) {
|
|
@@ -47370,192 +47876,6 @@ function createConsoleLock(deps = {}) {
|
|
|
47370
47876
|
}
|
|
47371
47877
|
return { ensureLockDir, readLock: readLock2, writeLock, removeLock, assertLockModes, assertTrustedLock };
|
|
47372
47878
|
}
|
|
47373
|
-
var DESKTOP_PROTOCOL_VERSION = 1;
|
|
47374
|
-
var DESKTOP_RESOURCE_ROOT_ENV = "FLEET_CONSOLE_RESOURCE_ROOT";
|
|
47375
|
-
var DESKTOP_OWNER_ID_ENV = "FLEET_CONSOLE_OWNER_ID";
|
|
47376
|
-
var DESKTOP_OWNER_KIND_ENV = "FLEET_CONSOLE_OWNER_KIND";
|
|
47377
|
-
var DESKTOP_PROTOCOL_VERSION_ENV = "FLEET_CONSOLE_PROTOCOL_VERSION";
|
|
47378
|
-
var DESKTOP_RESOURCE_ROOT_MARKER = ".fleet-console-resource-root";
|
|
47379
|
-
var DESKTOP_DEVELOPMENT_ENV = "FLEET_CONSOLE_DESKTOP_DEVELOPMENT";
|
|
47380
|
-
var LOCK_DIR_NAME3 = "fleet-console";
|
|
47381
|
-
var LOCK_FILE_NAME = "console.lock";
|
|
47382
|
-
var CONSOLE_DATA_DIR_NAME = "console";
|
|
47383
|
-
var CONSOLE_STATE_FILE_NAME = "state.json";
|
|
47384
|
-
var CONSOLE_SETTINGS_FILE_NAME = "settings.json";
|
|
47385
|
-
var CONSOLE_CAPTURES_DIR_NAME = "captures";
|
|
47386
|
-
function isDesktopDevelopmentEnvironment(env) {
|
|
47387
|
-
return env[DESKTOP_DEVELOPMENT_ENV] === "1";
|
|
47388
|
-
}
|
|
47389
|
-
function resolveCanonicalStableConsolePaths(input) {
|
|
47390
|
-
const dir = input.consoleDirOverride ?? path24__default.join(input.tmpDir, `${LOCK_DIR_NAME3}-${input.uid}-stable`);
|
|
47391
|
-
const dataDir = input.consoleDirOverride ?? path24__default.join(input.fleetDataDir, CONSOLE_DATA_DIR_NAME);
|
|
47392
|
-
return {
|
|
47393
|
-
dir,
|
|
47394
|
-
lockFile: path24__default.join(dir, LOCK_FILE_NAME),
|
|
47395
|
-
dataDir,
|
|
47396
|
-
stateFile: path24__default.join(dataDir, CONSOLE_STATE_FILE_NAME),
|
|
47397
|
-
settingsFile: path24__default.join(dataDir, CONSOLE_SETTINGS_FILE_NAME),
|
|
47398
|
-
capturesDir: path24__default.join(dataDir, CONSOLE_CAPTURES_DIR_NAME)
|
|
47399
|
-
};
|
|
47400
|
-
}
|
|
47401
|
-
function resolveCanonicalLocalConsolePaths(input) {
|
|
47402
|
-
const dir = path24__default.join(path24__default.resolve(input.packageRoot, "..", ".."), ".fleet", CONSOLE_DATA_DIR_NAME);
|
|
47403
|
-
return {
|
|
47404
|
-
dir,
|
|
47405
|
-
lockFile: path24__default.join(dir, LOCK_FILE_NAME),
|
|
47406
|
-
dataDir: dir,
|
|
47407
|
-
stateFile: path24__default.join(dir, CONSOLE_STATE_FILE_NAME),
|
|
47408
|
-
settingsFile: path24__default.join(dir, CONSOLE_SETTINGS_FILE_NAME),
|
|
47409
|
-
capturesDir: path24__default.join(dir, CONSOLE_CAPTURES_DIR_NAME)
|
|
47410
|
-
};
|
|
47411
|
-
}
|
|
47412
|
-
function isDesktopResourceRootMarkerValid(content) {
|
|
47413
|
-
return content.trim() === String(DESKTOP_PROTOCOL_VERSION);
|
|
47414
|
-
}
|
|
47415
|
-
|
|
47416
|
-
// core/host/desktop-protocol.ts
|
|
47417
|
-
function readDesktopProtocolEnvironment(env = process.env, deps = {}) {
|
|
47418
|
-
const resourceRoot = env[DESKTOP_RESOURCE_ROOT_ENV];
|
|
47419
|
-
const ownerId = env[DESKTOP_OWNER_ID_ENV];
|
|
47420
|
-
const ownerKind = env[DESKTOP_OWNER_KIND_ENV];
|
|
47421
|
-
const protocolVersion = env[DESKTOP_PROTOCOL_VERSION_ENV];
|
|
47422
|
-
const values = [resourceRoot, ownerId, ownerKind, protocolVersion];
|
|
47423
|
-
if (values.every((value) => value === void 0)) return null;
|
|
47424
|
-
if (values.some((value) => !value)) throw new Error("desktop_protocol_environment_incomplete");
|
|
47425
|
-
if (ownerKind !== "desktop") throw new Error("desktop_owner_kind_invalid");
|
|
47426
|
-
if (!isSafeOwnerId(ownerId)) throw new Error("desktop_owner_id_invalid");
|
|
47427
|
-
if (protocolVersion !== String(DESKTOP_PROTOCOL_VERSION)) throw new Error("desktop_protocol_version_unsupported");
|
|
47428
|
-
const resolvedRoot = isDesktopDevelopmentEnvironment2(env) ? validateDesktopDevelopmentResourceRoot(resourceRoot) : validateDesktopResourceRoot(resourceRoot, deps.expectedPackageRoot);
|
|
47429
|
-
return { owner: { kind: "desktop", id: ownerId, protocolVersion: DESKTOP_PROTOCOL_VERSION }, resourceRoot: resolvedRoot };
|
|
47430
|
-
}
|
|
47431
|
-
function isDesktopDevelopmentEnvironment2(env = process.env) {
|
|
47432
|
-
return isDesktopDevelopmentEnvironment(env);
|
|
47433
|
-
}
|
|
47434
|
-
function validateDesktopResourceRoot(root, expectedPackageRoot = resolveDesktopProtocolPackageRoot()) {
|
|
47435
|
-
if (!path24__default.isAbsolute(root)) throw new Error("desktop_resource_root_not_absolute");
|
|
47436
|
-
const resolvedRoot = fs9__default.realpathSync(root);
|
|
47437
|
-
const expectedRoot = fs9__default.realpathSync(expectedPackageRoot);
|
|
47438
|
-
if (resolvedRoot !== expectedRoot) throw new Error("desktop_resource_root_invalid");
|
|
47439
|
-
const markerPath = path24__default.join(resolvedRoot, DESKTOP_RESOURCE_ROOT_MARKER);
|
|
47440
|
-
const marker = fs9__default.readFileSync(markerPath, "utf8");
|
|
47441
|
-
if (!isDesktopResourceRootMarkerValid(marker)) throw new Error("desktop_resource_root_marker_invalid");
|
|
47442
|
-
return resolvedRoot;
|
|
47443
|
-
}
|
|
47444
|
-
function validateDesktopDevelopmentResourceRoot(root) {
|
|
47445
|
-
if (!path24__default.isAbsolute(root)) throw new Error("desktop_resource_root_not_absolute");
|
|
47446
|
-
let resolvedRoot;
|
|
47447
|
-
try {
|
|
47448
|
-
resolvedRoot = fs9__default.realpathSync(root);
|
|
47449
|
-
} catch {
|
|
47450
|
-
throw new Error("desktop_development_resource_root_invalid");
|
|
47451
|
-
}
|
|
47452
|
-
const expectedRoot = fs9__default.realpathSync(resolveDesktopProtocolPackageRoot());
|
|
47453
|
-
if (resolvedRoot !== expectedRoot) throw new Error("desktop_development_resource_root_invalid");
|
|
47454
|
-
return resolvedRoot;
|
|
47455
|
-
}
|
|
47456
|
-
function resolveDesktopProtocolPackageRoot() {
|
|
47457
|
-
const requireFromHere = createRequire(import.meta.url);
|
|
47458
|
-
for (const candidate of ["../package.json", "../../package.json"]) {
|
|
47459
|
-
try {
|
|
47460
|
-
return path24__default.dirname(requireFromHere.resolve(candidate));
|
|
47461
|
-
} catch (error51) {
|
|
47462
|
-
if (error51.code !== "MODULE_NOT_FOUND") throw error51;
|
|
47463
|
-
}
|
|
47464
|
-
}
|
|
47465
|
-
throw new Error("fleet_console_package_json_not_found");
|
|
47466
|
-
}
|
|
47467
|
-
function isSafeOwnerId(value) {
|
|
47468
|
-
return value.length > 0 && value.length <= 256 && /^[A-Za-z0-9._-]+$/.test(value);
|
|
47469
|
-
}
|
|
47470
|
-
function readFleetConsoleRelease(env = process.env) {
|
|
47471
|
-
const desktop = readDesktopProtocolEnvironment(env);
|
|
47472
|
-
if (desktop) return readReleaseAt(desktop.resourceRoot, readPackageChannel(desktop.resourceRoot));
|
|
47473
|
-
const requireFromHere = createRequire(import.meta.url);
|
|
47474
|
-
const packageJsonPath = resolvePackageJsonPath(requireFromHere);
|
|
47475
|
-
const packageRoot = path24__default.dirname(packageJsonPath);
|
|
47476
|
-
return readReleaseAt(packageRoot, readPackageChannel(packageRoot, requireFromHere), requireFromHere);
|
|
47477
|
-
}
|
|
47478
|
-
function readPackageChannel(packageRoot, requireFromHere = createRequire(import.meta.url)) {
|
|
47479
|
-
const pkg = requireFromHere(path24__default.join(packageRoot, "package.json"));
|
|
47480
|
-
return pkg.private === true ? "local" : "stable";
|
|
47481
|
-
}
|
|
47482
|
-
function readReleaseAt(packageRoot, channel, requireFromHere = createRequire(import.meta.url)) {
|
|
47483
|
-
const packageJsonPath = path24__default.join(packageRoot, "package.json");
|
|
47484
|
-
const pkg = requireFromHere(packageJsonPath);
|
|
47485
|
-
return { channel, version: pkg.version ?? "", packageRoot };
|
|
47486
|
-
}
|
|
47487
|
-
function resolvePackageJsonPath(requireFromHere) {
|
|
47488
|
-
for (const candidate of ["../package.json", "../../package.json"]) {
|
|
47489
|
-
try {
|
|
47490
|
-
return requireFromHere.resolve(candidate);
|
|
47491
|
-
} catch (error51) {
|
|
47492
|
-
if (error51.code !== "MODULE_NOT_FOUND") throw error51;
|
|
47493
|
-
}
|
|
47494
|
-
}
|
|
47495
|
-
throw new Error("fleet_console_package_json_not_found");
|
|
47496
|
-
}
|
|
47497
|
-
|
|
47498
|
-
// core/host/paths.ts
|
|
47499
|
-
var CONSOLE_RUNTIME_DIR_NAME = "console";
|
|
47500
|
-
var CONSOLE_DATA_DIR_NAME2 = "console";
|
|
47501
|
-
var CONSOLE_STATE_FILE_NAME2 = "state.json";
|
|
47502
|
-
var CONSOLE_SETTINGS_FILE_NAME2 = "settings.json";
|
|
47503
|
-
var CONSOLE_DATA_DIR_ENV = "FLEET_CONSOLE_DATA_DIR";
|
|
47504
|
-
var LEGACY_CONSOLE_DATA_DIR_ENV = "FLEET_CONSOLE_DIR";
|
|
47505
|
-
function readConsoleDirOverride(env) {
|
|
47506
|
-
return env[CONSOLE_DATA_DIR_ENV] ?? env[LEGACY_CONSOLE_DATA_DIR_ENV];
|
|
47507
|
-
}
|
|
47508
|
-
function createConsolePaths(deps = {}) {
|
|
47509
|
-
const env = deps.env ?? process.env;
|
|
47510
|
-
const base = readConsoleDirOverride(env) ?? defaultConsoleBaseDir(deps);
|
|
47511
|
-
return { dir: base, lockFile: path24__default.join(base, "console.lock") };
|
|
47512
|
-
}
|
|
47513
|
-
function createConsoleDataPaths(deps = {}) {
|
|
47514
|
-
const dir = defaultConsoleDataBaseDir(deps);
|
|
47515
|
-
return {
|
|
47516
|
-
dir,
|
|
47517
|
-
stateFile: path24__default.join(dir, CONSOLE_STATE_FILE_NAME2),
|
|
47518
|
-
settingsFile: path24__default.join(dir, CONSOLE_SETTINGS_FILE_NAME2)
|
|
47519
|
-
};
|
|
47520
|
-
}
|
|
47521
|
-
function defaultConsoleBaseDir(deps) {
|
|
47522
|
-
let release;
|
|
47523
|
-
const channel = deps.channel ?? (release = readFleetConsoleRelease()).channel;
|
|
47524
|
-
if (channel === "local") {
|
|
47525
|
-
const packageRoot = deps.packageRoot ?? (release ??= readFleetConsoleRelease()).packageRoot;
|
|
47526
|
-
return localConsoleDir(packageRoot);
|
|
47527
|
-
}
|
|
47528
|
-
const uid = deps.uid ?? (typeof process.getuid === "function" ? process.getuid() : 0);
|
|
47529
|
-
return resolveCanonicalStableConsolePaths({
|
|
47530
|
-
tmpDir: os3__default.tmpdir(),
|
|
47531
|
-
uid,
|
|
47532
|
-
fleetDataDir: getFleetDataDir()
|
|
47533
|
-
}).dir;
|
|
47534
|
-
}
|
|
47535
|
-
function defaultConsoleDataBaseDir(deps) {
|
|
47536
|
-
if (deps.fleetDataDir !== void 0) {
|
|
47537
|
-
return path24__default.join(deps.fleetDataDir, CONSOLE_DATA_DIR_NAME2);
|
|
47538
|
-
}
|
|
47539
|
-
const env = deps.env ?? process.env;
|
|
47540
|
-
const override = readConsoleDirOverride(env);
|
|
47541
|
-
if (override) {
|
|
47542
|
-
return override;
|
|
47543
|
-
}
|
|
47544
|
-
let release;
|
|
47545
|
-
const channel = deps.channel ?? (release = readFleetConsoleRelease()).channel;
|
|
47546
|
-
if (channel === "local") {
|
|
47547
|
-
const packageRoot = deps.packageRoot ?? (release ??= readFleetConsoleRelease()).packageRoot;
|
|
47548
|
-
return localConsoleDir(packageRoot);
|
|
47549
|
-
}
|
|
47550
|
-
return resolveCanonicalStableConsolePaths({
|
|
47551
|
-
tmpDir: os3__default.tmpdir(),
|
|
47552
|
-
uid: typeof process.getuid === "function" ? process.getuid() : 0,
|
|
47553
|
-
fleetDataDir: getFleetDataDir()
|
|
47554
|
-
}).dataDir;
|
|
47555
|
-
}
|
|
47556
|
-
function localConsoleDir(packageRoot) {
|
|
47557
|
-
return path24__default.join(path24__default.resolve(packageRoot, "..", ".."), ".fleet", CONSOLE_RUNTIME_DIR_NAME);
|
|
47558
|
-
}
|
|
47559
47879
|
|
|
47560
47880
|
// sdk/operations/launch-variants.ts
|
|
47561
47881
|
function readLaunchVariantGroups(value) {
|
|
@@ -48765,8 +49085,6 @@ function isNormalFace(face) {
|
|
|
48765
49085
|
const style = face.style.toLocaleLowerCase();
|
|
48766
49086
|
return NORMAL_FACE_MARKERS.some((marker) => style.includes(marker));
|
|
48767
49087
|
}
|
|
48768
|
-
|
|
48769
|
-
// core/host/system-fonts-routes.ts
|
|
48770
49088
|
var SYSTEM_FONTS_PATH = "/api/v1/settings/fonts/system";
|
|
48771
49089
|
var SYSTEM_FONTS_API_CATALOG = [
|
|
48772
49090
|
{
|
|
@@ -49203,7 +49521,16 @@ function withSecurityHeaders(headers) {
|
|
|
49203
49521
|
};
|
|
49204
49522
|
}
|
|
49205
49523
|
|
|
49206
|
-
// core/host/
|
|
49524
|
+
// core/host/http-infra.ts
|
|
49525
|
+
var CONSOLE_SECURITY_HEADERS = {
|
|
49526
|
+
"Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://img.shields.io; font-src 'self' data:; connect-src 'self' ws: wss: https://api.github.com; object-src 'none'; base-uri 'none'",
|
|
49527
|
+
"X-Content-Type-Options": "nosniff",
|
|
49528
|
+
"Referrer-Policy": "no-referrer",
|
|
49529
|
+
"Cache-Control": "no-store"
|
|
49530
|
+
};
|
|
49531
|
+
function withSecurityHeaders2(headers = {}) {
|
|
49532
|
+
return { ...CONSOLE_SECURITY_HEADERS, ...headers };
|
|
49533
|
+
}
|
|
49207
49534
|
var SSE_KEEPALIVE_INTERVAL_MS = 3e4;
|
|
49208
49535
|
function encodeSseData(event, data) {
|
|
49209
49536
|
return `event: ${event}
|
|
@@ -50516,6 +50843,9 @@ var CLAUDE_GATEWAY_TURN_KEYS = Object.freeze([
|
|
|
50516
50843
|
"abortController",
|
|
50517
50844
|
"stderr"
|
|
50518
50845
|
]);
|
|
50846
|
+
var CLAUDE_GATEWAY_SESSION_KEYS = Object.freeze(
|
|
50847
|
+
CLAUDE_GATEWAY_TURN_KEYS.filter((key) => key !== "prompt")
|
|
50848
|
+
);
|
|
50519
50849
|
|
|
50520
50850
|
// ../../packages/core-agent/src/claude/launch-env.ts
|
|
50521
50851
|
var CLAUDE_GATEWAY_MODEL_CACHE_RELPATH = "cache/gateway-models.json";
|
|
@@ -50576,6 +50906,32 @@ async function createIsolatedClaudeConfigDir(tempRoot = tmpdir()) {
|
|
|
50576
50906
|
}
|
|
50577
50907
|
};
|
|
50578
50908
|
}
|
|
50909
|
+
function readVendorContextUsage(response) {
|
|
50910
|
+
if (typeof response !== "object" || response === null) return null;
|
|
50911
|
+
const usage4 = response;
|
|
50912
|
+
if (typeof usage4.totalTokens !== "number" || typeof usage4.maxTokens !== "number") return null;
|
|
50913
|
+
const rows = Array.isArray(usage4.categories) ? usage4.categories : [];
|
|
50914
|
+
const memory = Array.isArray(usage4.memoryFiles) ? usage4.memoryFiles : [];
|
|
50915
|
+
const mcp = Array.isArray(usage4.mcpTools) ? usage4.mcpTools : [];
|
|
50916
|
+
return {
|
|
50917
|
+
total: usage4.totalTokens,
|
|
50918
|
+
max: usage4.maxTokens,
|
|
50919
|
+
model: typeof usage4.model === "string" ? usage4.model : "",
|
|
50920
|
+
compactAt: usage4.isAutoCompactEnabled === true && typeof usage4.autoCompactThreshold === "number" ? usage4.autoCompactThreshold : null,
|
|
50921
|
+
categories: rows.flatMap((row) => {
|
|
50922
|
+
const entry = row;
|
|
50923
|
+
return typeof entry?.name === "string" && typeof entry.tokens === "number" ? [{ name: entry.name, tokens: entry.tokens, deferred: entry.isDeferred === true }] : [];
|
|
50924
|
+
}),
|
|
50925
|
+
memoryFiles: memory.flatMap((row) => {
|
|
50926
|
+
const entry = row;
|
|
50927
|
+
return typeof entry?.path === "string" && typeof entry.tokens === "number" ? [{ path: entry.path, tokens: entry.tokens }] : [];
|
|
50928
|
+
}),
|
|
50929
|
+
mcpTools: mcp.flatMap((row) => {
|
|
50930
|
+
const entry = row;
|
|
50931
|
+
return typeof entry?.name === "string" && typeof entry.tokens === "number" ? [{ name: entry.name, server: typeof entry.serverName === "string" ? entry.serverName : "", tokens: entry.tokens }] : [];
|
|
50932
|
+
})
|
|
50933
|
+
};
|
|
50934
|
+
}
|
|
50579
50935
|
function runVendorQuery(input) {
|
|
50580
50936
|
const run = query({
|
|
50581
50937
|
prompt: input.prompt,
|
|
@@ -50583,6 +50939,14 @@ function runVendorQuery(input) {
|
|
|
50583
50939
|
});
|
|
50584
50940
|
let closed = false;
|
|
50585
50941
|
return {
|
|
50942
|
+
async getContextUsage() {
|
|
50943
|
+
if (closed || typeof run.getContextUsage !== "function") return null;
|
|
50944
|
+
try {
|
|
50945
|
+
return readVendorContextUsage(await run.getContextUsage());
|
|
50946
|
+
} catch {
|
|
50947
|
+
return null;
|
|
50948
|
+
}
|
|
50949
|
+
},
|
|
50586
50950
|
[Symbol.asyncIterator]() {
|
|
50587
50951
|
const iterator = run[Symbol.asyncIterator]();
|
|
50588
50952
|
return {
|
|
@@ -50603,6 +50967,111 @@ function runVendorQuery(input) {
|
|
|
50603
50967
|
}
|
|
50604
50968
|
};
|
|
50605
50969
|
}
|
|
50970
|
+
var VendorInputQueue = class {
|
|
50971
|
+
pending = [];
|
|
50972
|
+
waiting = null;
|
|
50973
|
+
closed = false;
|
|
50974
|
+
push(message) {
|
|
50975
|
+
if (this.closed) return;
|
|
50976
|
+
const waiting = this.waiting;
|
|
50977
|
+
if (waiting) {
|
|
50978
|
+
this.waiting = null;
|
|
50979
|
+
waiting({ done: false, value: message });
|
|
50980
|
+
return;
|
|
50981
|
+
}
|
|
50982
|
+
this.pending.push(message);
|
|
50983
|
+
}
|
|
50984
|
+
close() {
|
|
50985
|
+
if (this.closed) return;
|
|
50986
|
+
this.closed = true;
|
|
50987
|
+
const waiting = this.waiting;
|
|
50988
|
+
if (waiting) {
|
|
50989
|
+
this.waiting = null;
|
|
50990
|
+
waiting({ done: true, value: void 0 });
|
|
50991
|
+
}
|
|
50992
|
+
}
|
|
50993
|
+
[Symbol.asyncIterator]() {
|
|
50994
|
+
return {
|
|
50995
|
+
next: async () => {
|
|
50996
|
+
if (this.pending.length > 0) return { done: false, value: this.pending.shift() };
|
|
50997
|
+
if (this.closed) return { done: true, value: void 0 };
|
|
50998
|
+
return await new Promise((resolve3) => {
|
|
50999
|
+
this.waiting = resolve3;
|
|
51000
|
+
});
|
|
51001
|
+
}
|
|
51002
|
+
};
|
|
51003
|
+
}
|
|
51004
|
+
};
|
|
51005
|
+
function vendorUserMessage(text) {
|
|
51006
|
+
return {
|
|
51007
|
+
type: "user",
|
|
51008
|
+
session_id: "",
|
|
51009
|
+
message: { role: "user", content: [{ type: "text", text }] },
|
|
51010
|
+
parent_tool_use_id: null
|
|
51011
|
+
};
|
|
51012
|
+
}
|
|
51013
|
+
function runVendorSession(input) {
|
|
51014
|
+
const queue = new VendorInputQueue();
|
|
51015
|
+
const run = query({
|
|
51016
|
+
prompt: queue,
|
|
51017
|
+
options: input.options
|
|
51018
|
+
});
|
|
51019
|
+
let closed = false;
|
|
51020
|
+
return {
|
|
51021
|
+
send(text) {
|
|
51022
|
+
if (closed) return;
|
|
51023
|
+
queue.push(vendorUserMessage(text));
|
|
51024
|
+
},
|
|
51025
|
+
async interrupt() {
|
|
51026
|
+
if (closed || typeof run.interrupt !== "function") return;
|
|
51027
|
+
await run.interrupt();
|
|
51028
|
+
},
|
|
51029
|
+
async stopTask(taskId) {
|
|
51030
|
+
if (closed) return;
|
|
51031
|
+
if (typeof run.stopTask !== "function") {
|
|
51032
|
+
throw new TypeError("This Claude Agent SDK build has no stopTask control request.");
|
|
51033
|
+
}
|
|
51034
|
+
await run.stopTask(taskId);
|
|
51035
|
+
},
|
|
51036
|
+
async backgroundTasks(toolUseId) {
|
|
51037
|
+
if (closed) return false;
|
|
51038
|
+
if (typeof run.backgroundTasks !== "function") {
|
|
51039
|
+
throw new TypeError("This Claude Agent SDK build has no background_tasks control request.");
|
|
51040
|
+
}
|
|
51041
|
+
return await run.backgroundTasks(toolUseId);
|
|
51042
|
+
},
|
|
51043
|
+
async getContextUsage() {
|
|
51044
|
+
if (closed || typeof run.getContextUsage !== "function") return null;
|
|
51045
|
+
try {
|
|
51046
|
+
return readVendorContextUsage(await run.getContextUsage());
|
|
51047
|
+
} catch {
|
|
51048
|
+
return null;
|
|
51049
|
+
}
|
|
51050
|
+
},
|
|
51051
|
+
[Symbol.asyncIterator]() {
|
|
51052
|
+
const iterator = run[Symbol.asyncIterator]();
|
|
51053
|
+
return {
|
|
51054
|
+
async next() {
|
|
51055
|
+
const result = await iterator.next();
|
|
51056
|
+
return result.done === true ? { done: true, value: void 0 } : { done: false, value: result.value };
|
|
51057
|
+
}
|
|
51058
|
+
};
|
|
51059
|
+
},
|
|
51060
|
+
close() {
|
|
51061
|
+
if (closed) return;
|
|
51062
|
+
closed = true;
|
|
51063
|
+
queue.close();
|
|
51064
|
+
try {
|
|
51065
|
+
if (typeof run.close === "function") run.close();
|
|
51066
|
+
else {
|
|
51067
|
+
const closing = run.return?.(void 0);
|
|
51068
|
+
if (closing !== void 0) void closing.catch(() => void 0);
|
|
51069
|
+
}
|
|
51070
|
+
} catch {
|
|
51071
|
+
}
|
|
51072
|
+
}
|
|
51073
|
+
};
|
|
51074
|
+
}
|
|
50606
51075
|
|
|
50607
51076
|
// ../../packages/core-agent/src/claude/sdk.ts
|
|
50608
51077
|
var NATIVE_MODEL_ALIASES = /* @__PURE__ */ new Set(["sonnet", "opus", "opus[1m]", "haiku", "fable", "fable[1m]"]);
|
|
@@ -50614,79 +51083,135 @@ async function createClaudeGatewaySdk(options) {
|
|
|
50614
51083
|
const configDir = options.home?.kind === "shared" ? createSharedClaudeConfigHome(options.home.configDir) : await createIsolatedClaudeConfigDir(options.tempRoot);
|
|
50615
51084
|
let disposed = false;
|
|
50616
51085
|
let active = null;
|
|
51086
|
+
const reserveSlot = (kind) => {
|
|
51087
|
+
if (disposed) throw new Error("This Claude gateway SDK instance has been disposed.");
|
|
51088
|
+
if (active) {
|
|
51089
|
+
throw new Error(kind === "turn" ? "A turn is already running on this instance. Await it, or create another instance." : "A turn or session is already running on this instance. Close it, or create another instance.");
|
|
51090
|
+
}
|
|
51091
|
+
const reservation = { close: () => void 0 };
|
|
51092
|
+
active = reservation;
|
|
51093
|
+
return reservation;
|
|
51094
|
+
};
|
|
51095
|
+
const prepareLaunch = async () => {
|
|
51096
|
+
await configDir.writeModelCache({ baseUrl, models: catalogModels, fetchedAt: Date.now() });
|
|
51097
|
+
return claudeGatewayLaunchEnv(inherited, {
|
|
51098
|
+
baseUrl,
|
|
51099
|
+
configDir: configDir.path,
|
|
51100
|
+
homeKind: options.home?.kind === "shared" ? "shared" : "isolated"
|
|
51101
|
+
});
|
|
51102
|
+
};
|
|
51103
|
+
const vendorRunOptions = (request, model, env) => ({
|
|
51104
|
+
env,
|
|
51105
|
+
model,
|
|
51106
|
+
...request.systemPrompt === void 0 ? {} : { systemPrompt: vendorSystemPrompt(request.systemPrompt) },
|
|
51107
|
+
// 패키지가 스스로 지어내는 지시는 없다 — 여기 실리는 것은 전부 호출자가 고른 것이고,
|
|
51108
|
+
// 고르지 않으면 아무것도 붙지 않는다. 두 기본값이 그 규율을 구조로 만든다:
|
|
51109
|
+
// `settingSources: []`가 사용자·프로젝트 설정과 CLAUDE.md를 끄고, `strictMcpConfig`가
|
|
51110
|
+
// 그와 별개인 ambient .mcp.json·플러그인 MCP를 막는다.
|
|
51111
|
+
settingSources: options.settingSources ? [...options.settingSources] : [],
|
|
51112
|
+
strictMcpConfig: options.allowAmbientMcpServers !== true,
|
|
51113
|
+
// 플러그인의 MCP 선언은 읽지 않는다 — 좌표는 호출자가 이미 소유한다.
|
|
51114
|
+
...options.plugins && options.plugins.length > 0 ? { plugins: options.plugins.map((plugin) => ({ type: "local", path: plugin.path, skipMcpDiscovery: true })) } : {},
|
|
51115
|
+
// `--settings`와 같은 자리다. flag 소스로 병합되므로 사용자·프로젝트 설정을 대체하지 않는다.
|
|
51116
|
+
// skillOverrides와 ultracode만 연다 — settings 전체를 열면 호출자가 쓰지 않은 지시가 들어온다.
|
|
51117
|
+
...vendorFlagSettings(options),
|
|
51118
|
+
...request.effort === void 0 ? {} : { effort: request.effort },
|
|
51119
|
+
...request.cwd === void 0 ? {} : { cwd: request.cwd },
|
|
51120
|
+
...request.resume === void 0 ? {} : { resume: request.resume },
|
|
51121
|
+
...request.maxTurns === void 0 ? {} : { maxTurns: request.maxTurns },
|
|
51122
|
+
...request.maxBudgetUsd === void 0 ? {} : { maxBudgetUsd: request.maxBudgetUsd },
|
|
51123
|
+
...request.tools === void 0 ? {} : { tools: [...request.tools] },
|
|
51124
|
+
...request.allowedTools === void 0 ? {} : { allowedTools: [...request.allowedTools] },
|
|
51125
|
+
...request.disallowedTools === void 0 ? {} : { disallowedTools: [...request.disallowedTools] },
|
|
51126
|
+
...request.permissionMode === void 0 ? {} : { permissionMode: request.permissionMode },
|
|
51127
|
+
...request.canUseTool === void 0 ? {} : { canUseTool: vendorCanUseTool(request.canUseTool) },
|
|
51128
|
+
...request.mcpServers === void 0 && request.servedMcpServers === void 0 ? {} : { mcpServers: { ...request.mcpServers, ...vendorServedMcpServers(request.servedMcpServers) } },
|
|
51129
|
+
...request.includePartialMessages === void 0 ? {} : { includePartialMessages: request.includePartialMessages },
|
|
51130
|
+
...request.abortController === void 0 ? {} : { abortController: request.abortController },
|
|
51131
|
+
...request.stderr === void 0 ? {} : { stderr: request.stderr }
|
|
51132
|
+
});
|
|
50617
51133
|
const sdk = {
|
|
50618
51134
|
configDir: configDir.path,
|
|
50619
51135
|
models: Object.freeze(accepted.map((entry) => entry.id)),
|
|
50620
51136
|
async startTurn(turn) {
|
|
50621
|
-
|
|
50622
|
-
|
|
50623
|
-
|
|
50624
|
-
|
|
50625
|
-
|
|
50626
|
-
|
|
50627
|
-
|
|
50628
|
-
|
|
50629
|
-
|
|
50630
|
-
|
|
50631
|
-
|
|
50632
|
-
|
|
50633
|
-
|
|
50634
|
-
|
|
50635
|
-
|
|
50636
|
-
|
|
50637
|
-
|
|
50638
|
-
|
|
50639
|
-
|
|
50640
|
-
|
|
50641
|
-
|
|
50642
|
-
|
|
50643
|
-
|
|
50644
|
-
|
|
50645
|
-
|
|
50646
|
-
|
|
50647
|
-
|
|
50648
|
-
|
|
50649
|
-
|
|
50650
|
-
|
|
50651
|
-
|
|
50652
|
-
|
|
50653
|
-
|
|
50654
|
-
|
|
50655
|
-
|
|
50656
|
-
|
|
50657
|
-
|
|
50658
|
-
|
|
50659
|
-
...turn.canUseTool === void 0 ? {} : { canUseTool: vendorCanUseTool(turn.canUseTool) },
|
|
50660
|
-
...turn.mcpServers === void 0 && turn.servedMcpServers === void 0 ? {} : { mcpServers: { ...turn.mcpServers, ...vendorServedMcpServers(turn.servedMcpServers) } },
|
|
50661
|
-
...turn.includePartialMessages === void 0 ? {} : { includePartialMessages: turn.includePartialMessages },
|
|
50662
|
-
...turn.abortController === void 0 ? {} : { abortController: turn.abortController },
|
|
50663
|
-
...turn.stderr === void 0 ? {} : { stderr: turn.stderr }
|
|
51137
|
+
const reservation = reserveSlot("turn");
|
|
51138
|
+
try {
|
|
51139
|
+
assertKnownTurnKeys(turn);
|
|
51140
|
+
if (typeof turn.prompt !== "string" || turn.prompt.length === 0) {
|
|
51141
|
+
throw new TypeError("turn.prompt must be a non-empty string.");
|
|
51142
|
+
}
|
|
51143
|
+
const model = resolveTurnModel(turn.model, accepted);
|
|
51144
|
+
const env = await prepareLaunch();
|
|
51145
|
+
const run = runVendorQuery({
|
|
51146
|
+
prompt: turn.prompt,
|
|
51147
|
+
options: vendorRunOptions(turn, model, env)
|
|
51148
|
+
});
|
|
51149
|
+
const release = () => {
|
|
51150
|
+
if (active === tracked) active = null;
|
|
51151
|
+
};
|
|
51152
|
+
const tracked = {
|
|
51153
|
+
[Symbol.asyncIterator]() {
|
|
51154
|
+
const iterator = run[Symbol.asyncIterator]();
|
|
51155
|
+
return {
|
|
51156
|
+
async next() {
|
|
51157
|
+
const result = await iterator.next();
|
|
51158
|
+
if (result.done === true) release();
|
|
51159
|
+
return result;
|
|
51160
|
+
}
|
|
51161
|
+
};
|
|
51162
|
+
},
|
|
51163
|
+
close() {
|
|
51164
|
+
try {
|
|
51165
|
+
run.close();
|
|
51166
|
+
} finally {
|
|
51167
|
+
release();
|
|
51168
|
+
}
|
|
51169
|
+
},
|
|
51170
|
+
getContextUsage: () => run.getContextUsage()
|
|
51171
|
+
};
|
|
51172
|
+
if (active !== reservation) {
|
|
51173
|
+
run.close();
|
|
51174
|
+
throw new Error("This Claude gateway SDK instance has been disposed.");
|
|
50664
51175
|
}
|
|
50665
|
-
|
|
50666
|
-
|
|
50667
|
-
|
|
50668
|
-
|
|
50669
|
-
|
|
50670
|
-
|
|
50671
|
-
|
|
50672
|
-
|
|
50673
|
-
|
|
50674
|
-
|
|
50675
|
-
|
|
50676
|
-
|
|
51176
|
+
active = tracked;
|
|
51177
|
+
return tracked;
|
|
51178
|
+
} catch (error51) {
|
|
51179
|
+
if (active === reservation) active = null;
|
|
51180
|
+
throw error51;
|
|
51181
|
+
}
|
|
51182
|
+
},
|
|
51183
|
+
async openSession(request) {
|
|
51184
|
+
const reservation = reserveSlot("session");
|
|
51185
|
+
try {
|
|
51186
|
+
assertKnownSessionKeys(request);
|
|
51187
|
+
const model = resolveTurnModel(request.model, accepted);
|
|
51188
|
+
const env = await prepareLaunch();
|
|
51189
|
+
const session = runVendorSession({ options: vendorRunOptions(request, model, env) });
|
|
51190
|
+
const tracked = {
|
|
51191
|
+
send: (text) => session.send(text),
|
|
51192
|
+
interrupt: () => session.interrupt(),
|
|
51193
|
+
stopTask: (taskId) => session.stopTask(taskId),
|
|
51194
|
+
backgroundTasks: (toolUseId) => session.backgroundTasks(toolUseId),
|
|
51195
|
+
getContextUsage: () => session.getContextUsage(),
|
|
51196
|
+
[Symbol.asyncIterator]: () => session[Symbol.asyncIterator](),
|
|
51197
|
+
close() {
|
|
51198
|
+
try {
|
|
51199
|
+
session.close();
|
|
51200
|
+
} finally {
|
|
51201
|
+
if (active === tracked) active = null;
|
|
50677
51202
|
}
|
|
50678
|
-
};
|
|
50679
|
-
},
|
|
50680
|
-
close() {
|
|
50681
|
-
try {
|
|
50682
|
-
run.close();
|
|
50683
|
-
} finally {
|
|
50684
|
-
release();
|
|
50685
51203
|
}
|
|
51204
|
+
};
|
|
51205
|
+
if (active !== reservation) {
|
|
51206
|
+
session.close();
|
|
51207
|
+
throw new Error("This Claude gateway SDK instance has been disposed.");
|
|
50686
51208
|
}
|
|
50687
|
-
|
|
50688
|
-
|
|
50689
|
-
|
|
51209
|
+
active = tracked;
|
|
51210
|
+
return tracked;
|
|
51211
|
+
} catch (error51) {
|
|
51212
|
+
if (active === reservation) active = null;
|
|
51213
|
+
throw error51;
|
|
51214
|
+
}
|
|
50690
51215
|
},
|
|
50691
51216
|
async dispose() {
|
|
50692
51217
|
if (disposed) return;
|
|
@@ -50768,6 +51293,14 @@ function vendorCanUseTool(canUseTool) {
|
|
|
50768
51293
|
}
|
|
50769
51294
|
};
|
|
50770
51295
|
}
|
|
51296
|
+
function vendorFlagSettings(options) {
|
|
51297
|
+
const settings2 = {};
|
|
51298
|
+
if (options.skillOverrides && Object.keys(options.skillOverrides).length > 0) {
|
|
51299
|
+
settings2.skillOverrides = { ...options.skillOverrides };
|
|
51300
|
+
}
|
|
51301
|
+
if (options.ultracode === true) settings2.ultracode = true;
|
|
51302
|
+
return Object.keys(settings2).length > 0 ? { settings: settings2 } : {};
|
|
51303
|
+
}
|
|
50771
51304
|
function vendorSystemPrompt(systemPrompt) {
|
|
50772
51305
|
const text = systemPrompt?.text;
|
|
50773
51306
|
if (typeof text !== "string" || text.length === 0) {
|
|
@@ -50785,6 +51318,14 @@ function assertKnownTurnKeys(turn) {
|
|
|
50785
51318
|
);
|
|
50786
51319
|
}
|
|
50787
51320
|
}
|
|
51321
|
+
function assertKnownSessionKeys(request) {
|
|
51322
|
+
const unknown2 = Object.keys(request).filter((key) => !CLAUDE_GATEWAY_SESSION_KEYS.includes(key));
|
|
51323
|
+
if (unknown2.length > 0) {
|
|
51324
|
+
throw new TypeError(
|
|
51325
|
+
`Unsupported session option(s): ${unknown2.join(", ")}. Only an instruction the caller authored may reach the child, through systemPrompt; every other instruction channel is closed, so those options do not exist. A session receives its prompts through send(), never as an option.`
|
|
51326
|
+
);
|
|
51327
|
+
}
|
|
51328
|
+
}
|
|
50788
51329
|
function vendorServedMcpServers(servers) {
|
|
50789
51330
|
if (!servers?.length) return {};
|
|
50790
51331
|
return Object.fromEntries(servers.map((server) => [server.name, {
|
|
@@ -51603,17 +52144,6 @@ function toMetadata(item) {
|
|
|
51603
52144
|
};
|
|
51604
52145
|
}
|
|
51605
52146
|
|
|
51606
|
-
// core/host/security-headers.ts
|
|
51607
|
-
var CONSOLE_SECURITY_HEADERS = {
|
|
51608
|
-
"Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://img.shields.io; font-src 'self' data:; connect-src 'self' ws: wss: https://api.github.com; object-src 'none'; base-uri 'none'",
|
|
51609
|
-
"X-Content-Type-Options": "nosniff",
|
|
51610
|
-
"Referrer-Policy": "no-referrer",
|
|
51611
|
-
"Cache-Control": "no-store"
|
|
51612
|
-
};
|
|
51613
|
-
function withSecurityHeaders2(headers = {}) {
|
|
51614
|
-
return { ...CONSOLE_SECURITY_HEADERS, ...headers };
|
|
51615
|
-
}
|
|
51616
|
-
|
|
51617
52147
|
// core/host/codex/gateway.ts
|
|
51618
52148
|
var CODEX_BASE = "/console/codex";
|
|
51619
52149
|
var ALLOWED_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD", "POST"]);
|
|
@@ -57055,7 +57585,6 @@ function createConsoleStalePolicy(deps = {}) {
|
|
|
57055
57585
|
// core/host/console-lifecycle.ts
|
|
57056
57586
|
var FIXED_HOST = "127.0.0.1";
|
|
57057
57587
|
var HELP_BANNER_INDENT2 = " ";
|
|
57058
|
-
var DEFAULT_HELP_RELEASE = "local";
|
|
57059
57588
|
function parseConsoleCliMode(argv) {
|
|
57060
57589
|
if (argv.length === 0) return "start";
|
|
57061
57590
|
const [first, ...rest] = argv;
|
|
@@ -57082,7 +57611,8 @@ Run 'fleet console --help' for usage.`);
|
|
|
57082
57611
|
}
|
|
57083
57612
|
function buildConsoleHelpText(options = {}) {
|
|
57084
57613
|
const colorEnabled = resolveColorEnabled(options);
|
|
57085
|
-
const
|
|
57614
|
+
const release = options.release ?? formatConsoleHelpRelease();
|
|
57615
|
+
const subtitle = `Fleet Console \xB7 ${release}`;
|
|
57086
57616
|
const lines = [
|
|
57087
57617
|
...ASCII_FLEET_BANNER.map(
|
|
57088
57618
|
(line, index) => `${HELP_BANNER_INDENT2}${paint(GRADIENT_COLORS[index] ?? FLEET_COMMAND, line, colorEnabled)}`
|
|
@@ -57115,6 +57645,10 @@ function buildConsoleHelpText(options = {}) {
|
|
|
57115
57645
|
const text = lines.join("\n");
|
|
57116
57646
|
return colorEnabled ? text : stripAnsi(text);
|
|
57117
57647
|
}
|
|
57648
|
+
function formatConsoleHelpRelease() {
|
|
57649
|
+
const release = readFleetCliRelease();
|
|
57650
|
+
return `${release.version} \xB7 ${release.channel}`;
|
|
57651
|
+
}
|
|
57118
57652
|
function createConsoleDaemonLifecycle(deps = {}) {
|
|
57119
57653
|
const env = deps.env ?? V2.env;
|
|
57120
57654
|
const childEnv = env.FLEET_CONSOLE_NO_SYSTEM_CA === "1" ? env : withNodeSystemCa(env);
|
|
@@ -57265,11 +57799,108 @@ function resolveDefaultServerModulePath2() {
|
|
|
57265
57799
|
return fileURLToPath(import.meta.url);
|
|
57266
57800
|
}
|
|
57267
57801
|
|
|
57802
|
+
// cli/doctor.ts
|
|
57803
|
+
var CLAUDE_COMMAND = "claude";
|
|
57804
|
+
var SEMVER_PATTERN = /(\d+\.\d+\.\d+)/;
|
|
57805
|
+
var VERSION_PROBE_TIMEOUT_MS = 5e3;
|
|
57806
|
+
var DOCTOR_HELP_TEXT = `fleet doctor \u2014 Diagnose Fleet
|
|
57807
|
+
|
|
57808
|
+
Usage:
|
|
57809
|
+
fleet doctor
|
|
57810
|
+
`;
|
|
57811
|
+
async function dispatchDoctorCommand(argv, io, deps) {
|
|
57812
|
+
const extra = argv[1];
|
|
57813
|
+
if (extra === "--help" || extra === "-h") {
|
|
57814
|
+
io.stdout.write(DOCTOR_HELP_TEXT);
|
|
57815
|
+
return 0;
|
|
57816
|
+
}
|
|
57817
|
+
if (extra !== void 0) {
|
|
57818
|
+
io.stderr.write(`Unknown fleet doctor command: ${extra}
|
|
57819
|
+
`);
|
|
57820
|
+
io.stdout.write(DOCTOR_HELP_TEXT);
|
|
57821
|
+
return 1;
|
|
57822
|
+
}
|
|
57823
|
+
io.stdout.write(`${await buildFleetDoctorText(deps)}
|
|
57824
|
+
`);
|
|
57825
|
+
return 0;
|
|
57826
|
+
}
|
|
57827
|
+
async function buildFleetDoctorText(deps) {
|
|
57828
|
+
const env = deps.env ?? process.env;
|
|
57829
|
+
const release = deps.release ?? readFleetCliRelease();
|
|
57830
|
+
const dataDir = deps.dataDir ?? getFleetDataDir(env);
|
|
57831
|
+
const lockFile = deps.lockFile ?? createConsolePaths({ env }).lockFile;
|
|
57832
|
+
const resolveBinary2 = deps.resolveBinary ?? ((command2, processEnv) => resolvePathBinary(command2, processEnv));
|
|
57833
|
+
const runVersion = deps.runVersion ?? execFileVersion;
|
|
57834
|
+
const readConsoleStatus = deps.readConsoleStatus ?? runConsoleStatus;
|
|
57835
|
+
const signedIn = new Set(await deps.authService.listProviderIds());
|
|
57836
|
+
const binary = await describeClaudeBinary(resolveBinary2(CLAUDE_COMMAND, env), runVersion);
|
|
57837
|
+
const consoleLine = await readConsoleStatusLine(readConsoleStatus);
|
|
57838
|
+
return [
|
|
57839
|
+
formatRow("package", `@dotobokuri/fleet-console ${release.version} (${release.channel})`),
|
|
57840
|
+
formatRow("data", dataDir),
|
|
57841
|
+
formatRow("binary", binary),
|
|
57842
|
+
formatRow("kimi", signedIn.has(AUTH_CLI_DEFINITIONS.kimi.providerId) ? "signed in" : "signed out"),
|
|
57843
|
+
formatRow("opencode", signedIn.has(AUTH_CLI_DEFINITIONS.opencode.providerId) ? "signed in" : "signed out"),
|
|
57844
|
+
formatRow("console", stripConsolePrefix(consoleLine)),
|
|
57845
|
+
formatRow("lock", lockFile)
|
|
57846
|
+
].join("\n");
|
|
57847
|
+
}
|
|
57848
|
+
async function describeClaudeBinary(resolved, runVersion) {
|
|
57849
|
+
if (!resolved) return `${CLAUDE_COMMAND} (not on PATH)`;
|
|
57850
|
+
const displayPath = displayBinaryPath(resolved);
|
|
57851
|
+
try {
|
|
57852
|
+
const output = await runVersion(resolved.bin, [...resolved.prefixArgs, "--version"]);
|
|
57853
|
+
const version2 = output.match(SEMVER_PATTERN)?.[1];
|
|
57854
|
+
return version2 ? `${displayPath} ${version2}` : `${displayPath} (version unknown)`;
|
|
57855
|
+
} catch {
|
|
57856
|
+
return `${displayPath} (version unknown)`;
|
|
57857
|
+
}
|
|
57858
|
+
}
|
|
57859
|
+
function displayBinaryPath(resolved) {
|
|
57860
|
+
const shim = [...resolved.prefixArgs].reverse().map((arg) => arg.trim()).find((arg) => {
|
|
57861
|
+
const lower = arg.toLowerCase();
|
|
57862
|
+
return lower.endsWith(".cmd") || lower.endsWith(".bat");
|
|
57863
|
+
});
|
|
57864
|
+
return shim ?? resolved.bin;
|
|
57865
|
+
}
|
|
57866
|
+
function execFileVersion(bin, args) {
|
|
57867
|
+
return new Promise((resolve3, reject) => {
|
|
57868
|
+
execFile$1(bin, [...args], { timeout: VERSION_PROBE_TIMEOUT_MS }, (error51, stdout, stderr) => {
|
|
57869
|
+
if (error51) {
|
|
57870
|
+
reject(error51);
|
|
57871
|
+
return;
|
|
57872
|
+
}
|
|
57873
|
+
resolve3(`${stdout}${stderr}`);
|
|
57874
|
+
});
|
|
57875
|
+
});
|
|
57876
|
+
}
|
|
57877
|
+
function formatRow(key, value) {
|
|
57878
|
+
return `${key.padEnd(10)}${value}`;
|
|
57879
|
+
}
|
|
57880
|
+
async function readConsoleStatusLine(readConsoleStatus) {
|
|
57881
|
+
try {
|
|
57882
|
+
return firstLine(await readConsoleStatus());
|
|
57883
|
+
} catch (error51) {
|
|
57884
|
+
const reason = error51 instanceof Error ? error51.message : String(error51);
|
|
57885
|
+
return `unreadable (${firstLine(reason)})`;
|
|
57886
|
+
}
|
|
57887
|
+
}
|
|
57888
|
+
function firstLine(text) {
|
|
57889
|
+
return text.split("\n")[0] ?? text;
|
|
57890
|
+
}
|
|
57891
|
+
function stripConsolePrefix(line) {
|
|
57892
|
+
return line.replace(/^Fleet Console server:\s*/, "");
|
|
57893
|
+
}
|
|
57894
|
+
|
|
57895
|
+
// cli/fleet-dispatch.ts
|
|
57896
|
+
init_release();
|
|
57897
|
+
|
|
57268
57898
|
// cli/update/dispatcher.ts
|
|
57269
57899
|
var UPDATE_HELP_TEXT = `fleet update \u2014 Update Fleet
|
|
57270
57900
|
|
|
57271
57901
|
Usage:
|
|
57272
57902
|
fleet update
|
|
57903
|
+
fleet update --check
|
|
57273
57904
|
`;
|
|
57274
57905
|
async function dispatchUpdateCommand(argv, io, options = {}) {
|
|
57275
57906
|
const command2 = argv[1];
|
|
@@ -57277,6 +57908,16 @@ async function dispatchUpdateCommand(argv, io, options = {}) {
|
|
|
57277
57908
|
io.stdout.write(UPDATE_HELP_TEXT);
|
|
57278
57909
|
return 0;
|
|
57279
57910
|
}
|
|
57911
|
+
if (command2 === "--check") {
|
|
57912
|
+
if (argv[2] !== void 0) {
|
|
57913
|
+
io.stderr.write(`Unknown fleet update option: ${argv[2]}
|
|
57914
|
+
`);
|
|
57915
|
+
io.stdout.write(UPDATE_HELP_TEXT);
|
|
57916
|
+
return 1;
|
|
57917
|
+
}
|
|
57918
|
+
const { runFleetUpdateCheck: runFleetUpdateCheck2 } = await Promise.resolve().then(() => (init_check_report(), check_report_exports));
|
|
57919
|
+
return runFleetUpdateCheck2(io);
|
|
57920
|
+
}
|
|
57280
57921
|
if (command2 !== void 0) {
|
|
57281
57922
|
io.stderr.write(`Unknown fleet update command: ${command2}
|
|
57282
57923
|
`);
|
|
@@ -57294,10 +57935,15 @@ function classifyFleetArgv(argv) {
|
|
|
57294
57935
|
if (command2 === "update") return { kind: "update", argv };
|
|
57295
57936
|
if (command2 === "auth") return { kind: "auth", argv };
|
|
57296
57937
|
if (command2 === "console") return { kind: "console", consoleArgv: argv.slice(1) };
|
|
57938
|
+
if (command2 === "doctor") return { kind: "doctor", argv };
|
|
57939
|
+
if (command2 === "status") return { kind: "console", consoleArgv: ["status", ...argv.slice(1)] };
|
|
57297
57940
|
const passthroughArgv = command2 === "cli" ? argv.slice(1) : argv;
|
|
57298
57941
|
if (passthroughArgv[0] === "--help" || passthroughArgv[0] === "-h") {
|
|
57299
57942
|
return { kind: "help", passthroughArgs: passthroughArgv.slice(1) };
|
|
57300
57943
|
}
|
|
57944
|
+
if (command2 !== "cli" && isFleetVersionArg(passthroughArgv[0])) {
|
|
57945
|
+
return { kind: "version" };
|
|
57946
|
+
}
|
|
57301
57947
|
return { kind: "passthrough", passthroughArgs: [...passthroughArgv] };
|
|
57302
57948
|
}
|
|
57303
57949
|
async function dispatchFleetArgv(argv, options) {
|
|
@@ -57315,11 +57961,15 @@ async function dispatchFleetArgv(argv, options) {
|
|
|
57315
57961
|
if (dispatch.kind === "auth") {
|
|
57316
57962
|
return await auth(dispatch.argv, io, createInfra());
|
|
57317
57963
|
}
|
|
57964
|
+
if (dispatch.kind === "doctor") {
|
|
57965
|
+
return await dispatchDoctorCommand(dispatch.argv, io, { env, authService: createInfra().authService });
|
|
57966
|
+
}
|
|
57318
57967
|
if (dispatch.kind === "console") {
|
|
57319
57968
|
try {
|
|
57320
57969
|
const mode = parseConsoleCliMode(dispatch.consoleArgv);
|
|
57321
57970
|
if (mode === "help") {
|
|
57322
|
-
|
|
57971
|
+
const release = readFleetCliRelease();
|
|
57972
|
+
io.stdout.write(`${buildConsoleHelpText({ env, isTTY: io.stdout.isTTY, release: `${release.version} \xB7 ${release.channel}` })}
|
|
57323
57973
|
`);
|
|
57324
57974
|
return 0;
|
|
57325
57975
|
}
|
|
@@ -57355,6 +58005,10 @@ ${await runConsoleStatus()}
|
|
|
57355
58005
|
io.stdout.write(buildFleetHelpText({ env, isTTY: io.stdout.isTTY }));
|
|
57356
58006
|
return 0;
|
|
57357
58007
|
}
|
|
58008
|
+
if (dispatch.kind === "version") {
|
|
58009
|
+
io.stdout.write(buildFleetVersionText());
|
|
58010
|
+
return 0;
|
|
58011
|
+
}
|
|
57358
58012
|
await runAppImpl({ passthroughArgs: dispatch.passthroughArgs });
|
|
57359
58013
|
return 0;
|
|
57360
58014
|
}
|