Edit artifact from the host/ssh addition left a third workingDirectory block in the agent-items properties (duplicate JSON keys are last-wins, so prettier/CI did not flag it). Keep exactly one workingDirectory + one working_directory. Refs #620 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EsgTQzV5YUGk1JtCLP4B83
160 lines
4.5 KiB
JSON
160 lines
4.5 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://mosaicstack.dev/schemas/fleet-roster.schema.json",
|
|
"title": "Mosaic Fleet Roster",
|
|
"type": "object",
|
|
"required": ["version", "transport", "agents"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"version": {
|
|
"const": 1
|
|
},
|
|
"transport": {
|
|
"const": "tmux"
|
|
},
|
|
"tmux": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"socket_name": {
|
|
"type": "string",
|
|
"default": "mosaic-factory"
|
|
},
|
|
"socketName": {
|
|
"type": "string",
|
|
"default": "mosaic-factory"
|
|
},
|
|
"holder_session": {
|
|
"type": "string",
|
|
"default": "_holder"
|
|
},
|
|
"holderSession": {
|
|
"type": "string",
|
|
"default": "_holder"
|
|
}
|
|
}
|
|
},
|
|
"defaults": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"working_directory": {
|
|
"type": "string",
|
|
"default": "~/src"
|
|
},
|
|
"workingDirectory": {
|
|
"type": "string",
|
|
"default": "~/src"
|
|
}
|
|
}
|
|
},
|
|
"runtimes": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"reset_command": {
|
|
"type": "string"
|
|
},
|
|
"resetCommand": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"agents": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["name", "runtime"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z0-9_.-]+$"
|
|
},
|
|
"runtime": {
|
|
"type": "string"
|
|
},
|
|
"class": {
|
|
"type": "string"
|
|
},
|
|
"host": {
|
|
"description": "Host the agent runs on (hostname or IP). Absent = the fleet host. Used by onboarding-injection to render cross-host comms addresses. Manual cross-host listing is a pre-federation stopgap; federation (W1) auto-discovers later.",
|
|
"type": "string"
|
|
},
|
|
"ssh": {
|
|
"description": "SSH target (user@host) for a cross-host peer, so onboarding renders the `agent-send.sh -H <user@host>` form. Optional; only needed for agents on a different host than the fleet.",
|
|
"type": "string"
|
|
},
|
|
"socket": {
|
|
"description": "tmux socket the agent's session runs on. Onboarding renders `-L <socket>` when set; absent = the default socket (no `-L`). Must match the LIVE socket, not blindly inherit the roster's tmux.socket_name.",
|
|
"type": "string"
|
|
},
|
|
"working_directory": {
|
|
"type": "string"
|
|
},
|
|
"workingDirectory": {
|
|
"type": "string"
|
|
},
|
|
"model_hint": {
|
|
"type": "string"
|
|
},
|
|
"modelHint": {
|
|
"type": "string"
|
|
},
|
|
"persistent_persona": {
|
|
"oneOf": [{ "type": "boolean" }, { "type": "string" }]
|
|
},
|
|
"persistentPersona": {
|
|
"oneOf": [{ "type": "boolean" }, { "type": "string" }]
|
|
},
|
|
"reset_between_tasks": {
|
|
"type": "boolean"
|
|
},
|
|
"resetBetweenTasks": {
|
|
"type": "boolean"
|
|
},
|
|
"kickstart_template": {
|
|
"type": "string"
|
|
},
|
|
"kickstartTemplate": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"connector": {
|
|
"description": "Orchestrator chat connector (F4). Optional — absent means tmux (back-compat). Secrets (access/bot tokens) come from the environment, never this file.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["kind"],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": ["tmux", "discord", "matrix"]
|
|
},
|
|
"matrix": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["homeserver_url", "user_id", "room_id"],
|
|
"properties": {
|
|
"homeserver_url": { "type": "string" },
|
|
"user_id": { "type": "string" },
|
|
"room_id": { "type": "string" }
|
|
}
|
|
},
|
|
"discord": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["channel_id"],
|
|
"properties": {
|
|
"channel_id": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|