@mrrlin-dev/mcp 0.4.64 → 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.
Files changed (2) hide show
  1. package/dist/bin.cjs +111 -16
  2. 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
 
@@ -42846,7 +42940,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
42846
42940
  }
42847
42941
 
42848
42942
  // src/_generated/version.ts
42849
- var PKG_VERSION = "0.4.64";
42943
+ var PKG_VERSION = "0.4.65";
42850
42944
 
42851
42945
  // src/api-base-url-migrate.ts
42852
42946
  var import_node_fs5 = __toESM(require("node:fs"), 1);
@@ -46215,11 +46309,12 @@ async function runProviderReadinessCycle(deps) {
46215
46309
  try {
46216
46310
  const verify = deps.verify ?? verifyProviderReadiness;
46217
46311
  const runnerFor = deps.runnerFor ?? defaultRunnerFor;
46218
- const [codex, claude] = await Promise.all([
46312
+ const [codex, claude, agy] = await Promise.all([
46219
46313
  verify("codex", runnerFor("codex")),
46220
- verify("claude", runnerFor("claude"))
46314
+ verify("claude", runnerFor("claude")),
46315
+ verify("agy", runnerFor("agy"))
46221
46316
  ]);
46222
- await deps.push({ codex, claude });
46317
+ await deps.push({ codex, claude, agy });
46223
46318
  } catch (err) {
46224
46319
  deps.onError?.(err);
46225
46320
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.4.64",
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
24
  "@mrrlin/agent-client": "0.0.0",
26
25
  "@mrrlin/director-e2e": "0.0.0",
27
- "@mrrlin/tsconfig": "0.0.0",
28
26
  "@mrrlin/schemas": "0.0.0",
29
- "@mrrlin/wiki": "0.0.0"
27
+ "@mrrlin/tsconfig": "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",