@mrrlin-dev/mcp 0.4.63 → 0.4.65
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/dist/bin.cjs +133 -33
- package/package.json +4 -4
package/dist/bin.cjs
CHANGED
|
@@ -21566,6 +21566,37 @@ function isExternalAgentsWrapper(table) {
|
|
|
21566
21566
|
return false;
|
|
21567
21567
|
}
|
|
21568
21568
|
async function verifyProviderReadiness(provider, run3, opts = {}) {
|
|
21569
|
+
if (provider === "agy") {
|
|
21570
|
+
let cliResult2;
|
|
21571
|
+
try {
|
|
21572
|
+
cliResult2 = run3(["--version"]);
|
|
21573
|
+
if (cliResult2.status === 0) {
|
|
21574
|
+
return {
|
|
21575
|
+
ready: true,
|
|
21576
|
+
checks: { cli: true, version: true, auth: false, mcpReachable: false },
|
|
21577
|
+
details: []
|
|
21578
|
+
};
|
|
21579
|
+
} else if (cliResult2.status === null) {
|
|
21580
|
+
return {
|
|
21581
|
+
ready: false,
|
|
21582
|
+
checks: { cli: false, version: false, auth: false, mcpReachable: false },
|
|
21583
|
+
details: ["cli: `agy` binary not found on PATH"]
|
|
21584
|
+
};
|
|
21585
|
+
} else {
|
|
21586
|
+
return {
|
|
21587
|
+
ready: false,
|
|
21588
|
+
checks: { cli: true, version: false, auth: false, mcpReachable: false },
|
|
21589
|
+
details: [`cli: \`agy --version\` exited with code ${cliResult2.status}`]
|
|
21590
|
+
};
|
|
21591
|
+
}
|
|
21592
|
+
} catch (_e) {
|
|
21593
|
+
return {
|
|
21594
|
+
ready: false,
|
|
21595
|
+
checks: { cli: false, version: false, auth: false, mcpReachable: false },
|
|
21596
|
+
details: ["cli: `agy` binary not found on PATH"]
|
|
21597
|
+
};
|
|
21598
|
+
}
|
|
21599
|
+
}
|
|
21569
21600
|
const checks = { cli: false, version: false, auth: false, mcpReachable: false };
|
|
21570
21601
|
const details = [];
|
|
21571
21602
|
let cliResult;
|
|
@@ -37215,7 +37246,7 @@ var mrrlinOperatorSettingsSchema = external_exports.object({
|
|
|
37215
37246
|
// claude-director-and-runner design.md D4/D6: the operator's one selected agent-provider seat,
|
|
37216
37247
|
// governing Director chat, the execution runner, and consensus/arbiter reviewer exclusion alike.
|
|
37217
37248
|
// Not null, defaults to 'codex' at the DB layer, so every row already has a real value.
|
|
37218
|
-
agentProvider: external_exports.enum(["codex", "claude"]).default("codex"),
|
|
37249
|
+
agentProvider: external_exports.enum(["codex", "claude", "agy"]).default("codex"),
|
|
37219
37250
|
createdAt: external_exports.string().datetime(),
|
|
37220
37251
|
updatedAt: external_exports.string().datetime()
|
|
37221
37252
|
});
|
|
@@ -37223,7 +37254,7 @@ var mrrlinOperatorSettingsUpdateSchema = external_exports.object({
|
|
|
37223
37254
|
consensusEnabled: external_exports.boolean().optional(),
|
|
37224
37255
|
autonomyPaused: external_exports.boolean().optional(),
|
|
37225
37256
|
activeProjectSlug: external_exports.string().min(1).nullable().optional(),
|
|
37226
|
-
agentProvider: external_exports.enum(["codex", "claude"]).optional()
|
|
37257
|
+
agentProvider: external_exports.enum(["codex", "claude", "agy"]).optional()
|
|
37227
37258
|
}).strict().refine((value) => Object.keys(value).length > 0, {
|
|
37228
37259
|
message: "OperatorSettingsUpdate requires at least one field"
|
|
37229
37260
|
});
|
|
@@ -37238,7 +37269,7 @@ var operatorPresenceRequestSchema = external_exports.object({ projectSlug: exter
|
|
|
37238
37269
|
var mrrlinConsensusConfigSchema = external_exports.object({ consensusEnabled: external_exports.boolean() });
|
|
37239
37270
|
var consensusConfigResponseSchema = external_exports.object({ data: mrrlinConsensusConfigSchema });
|
|
37240
37271
|
var mrrlinAgentProviderConfigSchema = external_exports.object({
|
|
37241
|
-
agentProvider: external_exports.enum(["codex", "claude"])
|
|
37272
|
+
agentProvider: external_exports.enum(["codex", "claude", "agy"])
|
|
37242
37273
|
});
|
|
37243
37274
|
var agentProviderConfigResponseSchema = external_exports.object({ data: mrrlinAgentProviderConfigSchema });
|
|
37244
37275
|
var agentPoolSnapshotSchema = external_exports.object({
|
|
@@ -37273,6 +37304,40 @@ var agentCapabilitiesSchema = external_exports.object({
|
|
|
37273
37304
|
sandboxModes: external_exports.array(external_exports.enum(["read-only", "workspace-write", "danger-full-access"])),
|
|
37274
37305
|
poolProviderLabels: external_exports.array(external_exports.string())
|
|
37275
37306
|
});
|
|
37307
|
+
var AGENT_CAPABILITIES = {
|
|
37308
|
+
codex: {
|
|
37309
|
+
listsModels: true,
|
|
37310
|
+
readsRateLimits: true,
|
|
37311
|
+
models: [],
|
|
37312
|
+
modelCatalog: [],
|
|
37313
|
+
sandboxModes: ["read-only", "workspace-write", "danger-full-access"],
|
|
37314
|
+
poolProviderLabels: ["openai"]
|
|
37315
|
+
},
|
|
37316
|
+
claude: {
|
|
37317
|
+
listsModels: false,
|
|
37318
|
+
readsRateLimits: false,
|
|
37319
|
+
// Aliases the Claude CLI documents for `--model` (`claude --help`), and what each resolved to
|
|
37320
|
+
// on 2026-09-04 per the CLI's own `system.init.model` frame. Keep in step with
|
|
37321
|
+
// packages/agent-client/src/providers/claude/models.ts — the parity test enforces equality.
|
|
37322
|
+
models: ["fable", "opus", "sonnet", "haiku"],
|
|
37323
|
+
modelCatalog: [
|
|
37324
|
+
{ id: "fable", displayName: "Fable 5.1", description: "claude-fable-5-1" },
|
|
37325
|
+
{ id: "opus", displayName: "Opus 5", description: "claude-opus-5" },
|
|
37326
|
+
{ id: "sonnet", displayName: "Sonnet 5", description: "claude-sonnet-5" },
|
|
37327
|
+
{ id: "haiku", displayName: "Haiku 4.5", description: "claude-haiku-4-5-20251001" }
|
|
37328
|
+
],
|
|
37329
|
+
sandboxModes: ["read-only", "workspace-write", "danger-full-access"],
|
|
37330
|
+
poolProviderLabels: ["anthropic"]
|
|
37331
|
+
},
|
|
37332
|
+
agy: {
|
|
37333
|
+
listsModels: false,
|
|
37334
|
+
readsRateLimits: false,
|
|
37335
|
+
models: [],
|
|
37336
|
+
modelCatalog: [],
|
|
37337
|
+
sandboxModes: ["workspace-write"],
|
|
37338
|
+
poolProviderLabels: ["antigravity"]
|
|
37339
|
+
}
|
|
37340
|
+
};
|
|
37276
37341
|
var providerReadinessResultSchema = external_exports.object({
|
|
37277
37342
|
ready: external_exports.boolean(),
|
|
37278
37343
|
checks: external_exports.object({
|
|
@@ -37285,7 +37350,8 @@ var providerReadinessResultSchema = external_exports.object({
|
|
|
37285
37350
|
});
|
|
37286
37351
|
var providerReadinessSchema = external_exports.object({
|
|
37287
37352
|
codex: providerReadinessResultSchema,
|
|
37288
|
-
claude: providerReadinessResultSchema
|
|
37353
|
+
claude: providerReadinessResultSchema,
|
|
37354
|
+
agy: providerReadinessResultSchema
|
|
37289
37355
|
});
|
|
37290
37356
|
var providerReadinessResponseSchema = external_exports.object({
|
|
37291
37357
|
data: external_exports.object({ readiness: providerReadinessSchema.nullable() })
|
|
@@ -37384,7 +37450,7 @@ var mrrlinAsyncJobSchema = external_exports.object({
|
|
|
37384
37450
|
updatedAt: external_exports.string(),
|
|
37385
37451
|
// model-tier-planning-and-arbiter task 1.8: the seat minted at claim (or inherited from a
|
|
37386
37452
|
// prior attempt on this same lease); NULL only before the first beginAttempt call pins it.
|
|
37387
|
-
agentSeat: external_exports.enum(["codex", "claude"]).nullable().default(null)
|
|
37453
|
+
agentSeat: external_exports.enum(["codex", "claude", "agy"]).nullable().default(null)
|
|
37388
37454
|
}).strict();
|
|
37389
37455
|
var asyncJobResponseSchema = external_exports.object({ data: mrrlinAsyncJobSchema });
|
|
37390
37456
|
var asyncJobMaybeResponseSchema = external_exports.object({ data: mrrlinAsyncJobSchema.nullable() });
|
|
@@ -37404,7 +37470,7 @@ var mrrlinAsyncJobBeginAttemptSchema = external_exports.object({
|
|
|
37404
37470
|
requestedHash: external_exports.string().min(1),
|
|
37405
37471
|
// task 1.8: the caller has already resolved (inherited or minted) a seat for this job by the
|
|
37406
37472
|
// time it begins an attempt — required, not optional, so persistence can never be skipped.
|
|
37407
|
-
agentSeat: external_exports.enum(["codex", "claude"])
|
|
37473
|
+
agentSeat: external_exports.enum(["codex", "claude", "agy"])
|
|
37408
37474
|
});
|
|
37409
37475
|
var mrrlinAsyncJobTerminalizeSchema = external_exports.object({
|
|
37410
37476
|
leaseId: external_exports.string().min(1),
|
|
@@ -38010,7 +38076,7 @@ var mrrlinTaskSchema = external_exports.object({
|
|
|
38010
38076
|
// Output-optional (not .default) so existing task fixtures/mocks need no churn; DB rows always
|
|
38011
38077
|
// resolve it via taskRowToTask. Null reads as the pre-existing default provider and is never
|
|
38012
38078
|
// backfilled -- it is NOT a mismatch against whatever provider is currently selected.
|
|
38013
|
-
directorThreadProvider: external_exports.enum(["codex", "claude"]).nullable().optional(),
|
|
38079
|
+
directorThreadProvider: external_exports.enum(["codex", "claude", "agy"]).nullable().optional(),
|
|
38014
38080
|
// agnostic-delivery: asserted before the work, not the deliverable-gate's differently-meaning
|
|
38015
38081
|
// `attemptOutcome` asserted after it (design.md). Required at spec approval (task 3.2's API
|
|
38016
38082
|
// gate), never at creation -- null on every task until then, forever on legacy tasks. Shape-only
|
|
@@ -38358,7 +38424,7 @@ var mrrlinTaskUpdateSchema = external_exports.object({
|
|
|
38358
38424
|
category: taxonomyCategorySchema.optional(),
|
|
38359
38425
|
directorSessionId: external_exports.string().min(1).optional(),
|
|
38360
38426
|
directorThreadId: external_exports.string().min(1).nullable().optional(),
|
|
38361
|
-
directorThreadProvider: external_exports.enum(["codex", "claude"]).nullable().optional(),
|
|
38427
|
+
directorThreadProvider: external_exports.enum(["codex", "claude", "agy"]).nullable().optional(),
|
|
38362
38428
|
declaredOutcome: mrrlinDeclaredOutcomeSchema.nullable().optional(),
|
|
38363
38429
|
dueDate: external_exports.string().date().nullable().optional(),
|
|
38364
38430
|
impact: mrrlinTaskImpactSchema.optional(),
|
|
@@ -38679,7 +38745,7 @@ var mrrlinRunPrerequisiteSchema = external_exports.object({
|
|
|
38679
38745
|
});
|
|
38680
38746
|
var mrrlinExecutionRunSchema = external_exports.object({
|
|
38681
38747
|
actor: external_exports.string().min(1),
|
|
38682
|
-
agentSeat: external_exports.enum(["codex", "claude"]).nullable(),
|
|
38748
|
+
agentSeat: external_exports.enum(["codex", "claude", "agy"]).nullable(),
|
|
38683
38749
|
baseSha: external_exports.string().min(1).nullable(),
|
|
38684
38750
|
branch: external_exports.string().min(1).nullable(),
|
|
38685
38751
|
blockingReason: mrrlinRunBlockingReasonCodeSchema.nullable(),
|
|
@@ -38739,7 +38805,7 @@ var mrrlinTaskStateSchema = external_exports.object({
|
|
|
38739
38805
|
// claude-director-and-runner design.md D5: which provider's CLI produced retiredThreadId.
|
|
38740
38806
|
// Output-optional so existing task_state fixtures/mocks need no churn; null reads as the
|
|
38741
38807
|
// pre-existing default provider and is never backfilled.
|
|
38742
|
-
retiredThreadProvider: external_exports.enum(["codex", "claude"]).nullable().optional(),
|
|
38808
|
+
retiredThreadProvider: external_exports.enum(["codex", "claude", "agy"]).nullable().optional(),
|
|
38743
38809
|
updatedAt: external_exports.string().datetime()
|
|
38744
38810
|
});
|
|
38745
38811
|
var mrrlinTaskStateUpsertSchema = external_exports.object({
|
|
@@ -38781,7 +38847,7 @@ var mrrlinExecutionRunCreateSchema = external_exports.object({
|
|
|
38781
38847
|
worktreeId: external_exports.string().min(1).optional()
|
|
38782
38848
|
});
|
|
38783
38849
|
var mrrlinExecutionRunUpdateSchema = external_exports.object({
|
|
38784
|
-
agentSeat: external_exports.enum(["codex", "claude"]).nullable().optional(),
|
|
38850
|
+
agentSeat: external_exports.enum(["codex", "claude", "agy"]).nullable().optional(),
|
|
38785
38851
|
baseSha: external_exports.string().min(1).nullable().optional(),
|
|
38786
38852
|
branch: external_exports.string().min(1).nullable().optional(),
|
|
38787
38853
|
blockingReason: mrrlinRunBlockingReasonCodeSchema.nullable().optional(),
|
|
@@ -40355,8 +40421,33 @@ var ClaudeAgentHandle = class {
|
|
|
40355
40421
|
}
|
|
40356
40422
|
};
|
|
40357
40423
|
|
|
40424
|
+
// ../../packages/agent-client/dist/providers/agy/adapter.js
|
|
40425
|
+
var AgyProviderAdapter = class {
|
|
40426
|
+
id = "agy";
|
|
40427
|
+
capabilities() {
|
|
40428
|
+
return AGENT_CAPABILITIES.agy;
|
|
40429
|
+
}
|
|
40430
|
+
// Stub adapter: real process spawning and JSONL stdio streaming will be implemented in agy-stdio-streaming
|
|
40431
|
+
async acquireWarm() {
|
|
40432
|
+
return {
|
|
40433
|
+
startThread: () => Promise.resolve({ threadId: "mock-thread-id" }),
|
|
40434
|
+
resumeThread: () => Promise.resolve({ threadId: "mock-thread-id" }),
|
|
40435
|
+
startTurn: () => Promise.resolve({ turnId: "mock-turn-id" }),
|
|
40436
|
+
interruptTurn: () => Promise.resolve(),
|
|
40437
|
+
onEvent: () => () => {
|
|
40438
|
+
},
|
|
40439
|
+
onActivity: () => () => {
|
|
40440
|
+
},
|
|
40441
|
+
listModels: () => Promise.resolve([]),
|
|
40442
|
+
readRateLimits: () => Promise.resolve(null)
|
|
40443
|
+
};
|
|
40444
|
+
}
|
|
40445
|
+
releaseWarm() {
|
|
40446
|
+
}
|
|
40447
|
+
};
|
|
40448
|
+
|
|
40358
40449
|
// ../../packages/agent-client/dist/registry.js
|
|
40359
|
-
var KNOWN_PROVIDERS = { codex: true, claude: true };
|
|
40450
|
+
var KNOWN_PROVIDERS = { codex: true, claude: true, agy: true };
|
|
40360
40451
|
var KNOWN_PROVIDER_IDS = Object.keys(KNOWN_PROVIDERS);
|
|
40361
40452
|
function readProviderFromEnv(env) {
|
|
40362
40453
|
const raw = env.MRRLIN_AGENT_PROVIDER;
|
|
@@ -40377,6 +40468,9 @@ function resolveProvider(env, persisted) {
|
|
|
40377
40468
|
if (id === "claude") {
|
|
40378
40469
|
return new ClaudeProviderAdapter();
|
|
40379
40470
|
}
|
|
40471
|
+
if (id === "agy") {
|
|
40472
|
+
return new AgyProviderAdapter();
|
|
40473
|
+
}
|
|
40380
40474
|
throw new Error(`not-yet-wired: ${id}`);
|
|
40381
40475
|
}
|
|
40382
40476
|
|
|
@@ -40688,8 +40782,8 @@ function runAgentExec(input, deps, persistedProvider) {
|
|
|
40688
40782
|
}
|
|
40689
40783
|
|
|
40690
40784
|
// ../../packages/agent-client/dist/resolved-seat.js
|
|
40691
|
-
var CODEX_STRONG_MODEL_CONSTANT = "gpt-5.
|
|
40692
|
-
var CLAUDE_STRONG_MODEL_CONSTANT = "
|
|
40785
|
+
var CODEX_STRONG_MODEL_CONSTANT = "gpt-5.6-terra";
|
|
40786
|
+
var CLAUDE_STRONG_MODEL_CONSTANT = "sonnet";
|
|
40693
40787
|
var CODEX_WEAK_MODEL_CONSTANT = "codex-gpt-5.4-mini";
|
|
40694
40788
|
var CLAUDE_WEAK_MODEL_CONSTANT = "haiku";
|
|
40695
40789
|
var CODEX_STRONG_MODEL_ENV = "MRRLIN_CODEX_STRONG_MODEL";
|
|
@@ -40720,34 +40814,39 @@ async function mintResolvedSeat(provider, opts) {
|
|
|
40720
40814
|
const providerId = provider.id;
|
|
40721
40815
|
let strongModel;
|
|
40722
40816
|
let weakModel;
|
|
40817
|
+
const strongEnvValue = process.env[providerId === "codex" ? CODEX_STRONG_MODEL_ENV : CLAUDE_STRONG_MODEL_ENV]?.trim();
|
|
40723
40818
|
if (opts?.handle && capabilities.listsModels) {
|
|
40724
40819
|
try {
|
|
40725
40820
|
const models = await opts.handle.listModels();
|
|
40726
|
-
|
|
40727
|
-
|
|
40728
|
-
|
|
40821
|
+
if (strongEnvValue && models.some((m) => m.id === strongEnvValue)) {
|
|
40822
|
+
strongModel = strongEnvValue;
|
|
40823
|
+
logFallback(providerId, "strong", "env", strongModel);
|
|
40729
40824
|
} else {
|
|
40730
|
-
|
|
40825
|
+
const picked = pickStrongModelFromList(models);
|
|
40826
|
+
if (picked) {
|
|
40827
|
+
strongModel = picked;
|
|
40828
|
+
if (strongEnvValue) {
|
|
40829
|
+
logFallback(providerId, "strong", "live-default (env pin retired)", strongModel);
|
|
40830
|
+
}
|
|
40831
|
+
} else {
|
|
40832
|
+
throw new Error("empty model list");
|
|
40833
|
+
}
|
|
40731
40834
|
}
|
|
40732
40835
|
} catch {
|
|
40733
|
-
|
|
40734
|
-
|
|
40735
|
-
strongModel = envValue;
|
|
40836
|
+
if (strongEnvValue) {
|
|
40837
|
+
strongModel = strongEnvValue;
|
|
40736
40838
|
logFallback(providerId, "strong", "env", strongModel);
|
|
40737
40839
|
} else {
|
|
40738
40840
|
strongModel = providerId === "codex" ? CODEX_STRONG_MODEL_CONSTANT : CLAUDE_STRONG_MODEL_CONSTANT;
|
|
40739
40841
|
logFallback(providerId, "strong", "constant", strongModel);
|
|
40740
40842
|
}
|
|
40741
40843
|
}
|
|
40844
|
+
} else if (strongEnvValue) {
|
|
40845
|
+
strongModel = strongEnvValue;
|
|
40846
|
+
logFallback(providerId, "strong", "env", strongModel);
|
|
40742
40847
|
} else {
|
|
40743
|
-
|
|
40744
|
-
|
|
40745
|
-
strongModel = envValue;
|
|
40746
|
-
logFallback(providerId, "strong", "env", strongModel);
|
|
40747
|
-
} else {
|
|
40748
|
-
strongModel = providerId === "codex" ? CODEX_STRONG_MODEL_CONSTANT : CLAUDE_STRONG_MODEL_CONSTANT;
|
|
40749
|
-
logFallback(providerId, "strong", "constant", strongModel);
|
|
40750
|
-
}
|
|
40848
|
+
strongModel = providerId === "codex" ? CODEX_STRONG_MODEL_CONSTANT : CLAUDE_STRONG_MODEL_CONSTANT;
|
|
40849
|
+
logFallback(providerId, "strong", "constant", strongModel);
|
|
40751
40850
|
}
|
|
40752
40851
|
if (providerId === "claude") {
|
|
40753
40852
|
weakModel = CLAUDE_WEAK_MODEL_CONSTANT;
|
|
@@ -42841,7 +42940,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
|
|
|
42841
42940
|
}
|
|
42842
42941
|
|
|
42843
42942
|
// src/_generated/version.ts
|
|
42844
|
-
var PKG_VERSION = "0.4.
|
|
42943
|
+
var PKG_VERSION = "0.4.65";
|
|
42845
42944
|
|
|
42846
42945
|
// src/api-base-url-migrate.ts
|
|
42847
42946
|
var import_node_fs5 = __toESM(require("node:fs"), 1);
|
|
@@ -46210,11 +46309,12 @@ async function runProviderReadinessCycle(deps) {
|
|
|
46210
46309
|
try {
|
|
46211
46310
|
const verify = deps.verify ?? verifyProviderReadiness;
|
|
46212
46311
|
const runnerFor = deps.runnerFor ?? defaultRunnerFor;
|
|
46213
|
-
const [codex, claude] = await Promise.all([
|
|
46312
|
+
const [codex, claude, agy] = await Promise.all([
|
|
46214
46313
|
verify("codex", runnerFor("codex")),
|
|
46215
|
-
verify("claude", runnerFor("claude"))
|
|
46314
|
+
verify("claude", runnerFor("claude")),
|
|
46315
|
+
verify("agy", runnerFor("agy"))
|
|
46216
46316
|
]);
|
|
46217
|
-
await deps.push({ codex, claude });
|
|
46317
|
+
await deps.push({ codex, claude, agy });
|
|
46218
46318
|
} catch (err) {
|
|
46219
46319
|
deps.onError?.(err);
|
|
46220
46320
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrrlin-dev/mcp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.65",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"mrrlin-mcp": "dist/bin.cjs"
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"@types/ws": "^8.18.1",
|
|
22
22
|
"esbuild": "^0.24.0",
|
|
23
23
|
"tsx": "^4.22.3",
|
|
24
|
-
"@mrrlin/client": "0.0.0",
|
|
25
|
-
"@mrrlin/director-e2e": "0.0.0",
|
|
26
24
|
"@mrrlin/agent-client": "0.0.0",
|
|
25
|
+
"@mrrlin/director-e2e": "0.0.0",
|
|
27
26
|
"@mrrlin/schemas": "0.0.0",
|
|
28
27
|
"@mrrlin/tsconfig": "0.0.0",
|
|
29
|
-
"@mrrlin/wiki": "0.0.0"
|
|
28
|
+
"@mrrlin/wiki": "0.0.0",
|
|
29
|
+
"@mrrlin/client": "0.0.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@iarna/toml": "^2.2.5",
|